Pagini recente » Cod sursa (job #3163240) | Cod sursa (job #1827483) | Cod sursa (job #3188463) | Cod sursa (job #2217762) | Cod sursa (job #2226004)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("nrcuv.in");
ofstream cout ("nrcuv.out");
const int SIGMA = 26;
const int CMAX = 729;
const int NMAX = 1e3;
const int MOD = 104659;
int n, m;
char a, b;
int dp[1 + NMAX][1 + SIGMA];
bool f[1 + CMAX];
vector <int> g[1 + NMAX];
int main() {
cin >> n >> m;
for(int i = 1; i <= m; i++) {
cin >> a >> b;
int ca = a - 'a' + 1, cb = b - 'a' + 1;
if(ca > cb)
swap(ca, cb);
if(!f[ca * 27 + cb]) {
g[ca].push_back(cb);
if(ca != cb)
g[cb].push_back(ca);
f[ca * 27 + cb] = 1;
}
}
for(int i = 1; i <= SIGMA; i++)
dp[1][i] = 1;
for(int i = 2; i <= n; i++) {
int sum = 0;
for(int j = 1; j <= SIGMA; j++)
sum = (sum + dp[i - 1][j]) % MOD;
for(int j = 1; j <= SIGMA; j++) {
dp[i][j] = sum;
for(int k = 0; k < g[j].size(); k++)
dp[i][j] = (dp[i][j] - dp[i - 1][g[j][k]] + MOD) % MOD;
}
}
int sum = 0;
for(int i = 1; i <= SIGMA; i++)
sum = (sum + dp[n][i]) % MOD;
cout << sum;
return 0;
}