Pagini recente » Cod sursa (job #2457785) | Cod sursa (job #2531409) | Cod sursa (job #2086444) | Cod sursa (job #2773241) | Cod sursa (job #3308732)
#include <bits/stdc++.h>
#define MOD 104659
using namespace std;
ifstream in("nrcuv.in");
ofstream out("nrcuv.out");
bool l[26][26]; ///l[i][j] = 1 daca litere i si j nu pot fi alaturate intr-un cuvant
int dp[2][26]; ///dp[i%2][j] = numarul de cuvinte care au i litere care se termina cu litera j
int main()
{
int n, m;
in >> n >> m;
for(int i=1; i<=m; i++)
{
char l1, l2;
in >> l1 >> l2;
l[l1-'a'][l2-'a']=1;
l[l2-'a'][l1-'a']=1;
}
for(int i=1; i<=n; i++)
{
for(int j=0; j<26; j++)
{
if(i==1)
{
dp[1][j]=1;
continue;
}
dp[i%2][j]=0; ///resetam dp-ul
for(int k=0; k<26; k++)
{
if(l[j][k]==0) ///daca literele pot fi invecinate
{
dp[i%2][j]+=dp[(i-1)%2][k];
if(dp[i%2][j]>=MOD) dp[i%2][j]%=MOD;
}
}
}
}
int ans=0; ///raspunsul cerut
for(int i=0; i<26; i++)
{
ans+=dp[n%2][i];
if(ans>=MOD) ans-=MOD;
}
out << ans;
return 0;
}