Pagini recente » Cod sursa (job #665518) | Cod sursa (job #2623112) | Cod sursa (job #2225904) | Cod sursa (job #1137720) | Cod sursa (job #2394939)
#include <iostream>
#include <fstream>
#include <map>
const int MAXN = 1000 + 5,SIGMA = 30,MOD = 104659;
using namespace std;
ifstream in("nrcuv.in");
ofstream out("nrcuv.out");
int n,m,dp[MAXN][SIGMA];
bool bad[SIGMA][SIGMA];
int main()
{
in>>n>>m;
for(int i = 1; i <= m; i++){
char a,b;
in>>a>>b;
bad[a - 'a'][b - 'a'] = true;
bad[b - 'a'][a - 'a'] = true;
}
for(int i = 'a'; i <= 'z'; i++)
dp[1][i - 'a'] = 1;
for(int i = 2; i <= n; i++){
for(char j = 'a'; j <= 'z'; j++){
for(char inapoi = 'a'; inapoi <= 'z'; inapoi++){
if(!bad[inapoi - 'a'][j - 'a']){
dp[i][j - 'a'] += dp[i - 1][inapoi - 'a'];
dp[i][j - 'a'] %= MOD;
}
}
}
}
int ans = 0;
for(char i = 'a'; i <= 'z'; i++){
ans += dp[n][i - 'a'];
ans %= MOD;
}
out<<ans;
return 0;
}