Pagini recente » Borderou de evaluare (job #3347490) | Borderou de evaluare (job #3328280) | Borderou de evaluare (job #3328282) | Borderou de evaluare (job #3354763) | Cod sursa (job #3348246)
#include<cstdio>
using namespace std;
const int LETTERS = 26;
const int NMAX = 1005;
const int MOD = 104659;
bool vecine[LETTERS + 1][LETTERS + 1];
int dp[LETTERS + 1][NMAX]; // dp[litera][i] numarul de siruri de lungime i terminate in c
int main() {
freopen("nrcuv.in", "r", stdin);
freopen("nrcuv.out", "w", stdout);
int n, m;
scanf("%d %d", &n, &m);
getchar();
for (int i = 1; i <= m; i++) {
char a, b;
scanf("%c %c", &a, &b);
getchar();
vecine[a - 'a'][b - 'a'] = true; // nu pot fi vecine
vecine[b - 'a'][a - 'a'] = true;
}
for (int letter = 0; letter < LETTERS; letter++) {
dp[letter][1] = 1;
}
for (int i = 2; i <= n; i++) {
for (int letter1 = 0; letter1 < LETTERS; letter1++) {
for (int letter2 = 0; letter2 < LETTERS; letter2++) {
if (vecine[letter1][letter2] == 0)
dp[letter1][i] += dp[letter2][i - 1];
}
}
}
int result = 0;
for (int letter = 0; letter < LETTERS; letter++) {
result += dp[letter][n];
result %= MOD;
}
printf("%d", result);
return 0;
}