Pagini recente » Cod sursa (job #2960608) | Cod sursa (job #2376996) | Cod sursa (job #2224788) | Cod sursa (job #2639673) | Cod sursa (job #1476343)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("nrcuv.in");
ofstream fout ("nrcuv.out");
//dp[i][j] = numarul de siruri valide de lungime i care se termina in a j-a litera a alfabetului
//dp[1][i] = 1;
//dp[i][l1] += dp[i - 1][l2] daca v[i][l2] == false;
int dp[1001][27];
// v[i][j] = true daca a i-a si a j-a litera nu pot fi alaturate, altfel false
bool v[27][27];
int main() {
int n, m, i, j, l1, l2, s;
char a, b;
fin >> n >> m;
for (i = 0; i < m; ++i) {
fin >> a >> b;
v[a - 'a'][b - 'a'] = v[b - 'a'][a - 'a'] = true;
}
for (i = 0; i < 26; i++) {
dp[1][i] = 1;
}
for (i = 2; i <= n; i++) {
for (l1 = 0; l1 < 26; l1++) {
for (l2 = 0; l2 < 26; l2++) {
if (v[l1][l2] == false) {
dp[i][l1] += dp[i - 1][l2];
dp[i][l1] %= 104659;
}
}
}
}
for (j = 0, s = 0; j < 26; j++) {
s += dp[n][j];
s %= 104659;
}
fout << s;
return 0;
}