Pagini recente » Cod sursa (job #1001996) | Cod sursa (job #227401) | Cod sursa (job #2082477) | Cod sursa (job #2873607) | Cod sursa (job #3160371)
#include <iostream>
#include <fstream>
#include <set>
using namespace std;
ifstream fin("nrcuv.in");
ofstream fout("nrcuv.out");
const int MOD = 104659;
int dp[1003][30];
bool nuevoie[30][30];
set<int> ch[30];
int main() {
int n, m;
fin >> n >> m;
while (m--) {
char ch1, ch2;
fin >> ch1 >> ch2;
int a = ch1 - 'a', b = ch2 - 'a';
nuevoie[a][b] = nuevoie[b][a] = true;
}
for (int a = 0; a <= ('z' - 'a'); a++) {
for (int b = 0; b <= ('z' - 'a'); b++) {
if (!nuevoie[a][b]) {
ch[a].insert(b);
ch[b].insert(a);
}
}
}
for (int c = 0; c <= ('z' - 'a'); c++)
dp[1][c] = 1;
for (int l = 2; l <= n; l++) {
for (int c = 0; c <= ('z' - 'a'); c++) {
for (auto cv : ch[c]) {
dp[l][c] = (dp[l][c] % MOD + dp[l - 1][cv] % MOD) % MOD;
}
}
}
int res = 0;
for (int c = 0; c <= ('z' - 'a'); c++) {
res = (res % MOD + dp[n][c] % MOD) % MOD;
}
fout << res;
return 0;
}