Pagini recente » Monitorul de evaluare | Diferente pentru problema/kami intre reviziile 18 si 2 | Diferente pentru problema/partmin intre reviziile 11 si 3 | Cod sursa (job #1692729) | Cod sursa (job #1430370)
#include <cstdio>
using namespace std;
#define inFile "nrcuv.in"
#define outFile "nrcuv.out"
#define MAX_N 1000
#define ALPHABET 26
#define MOD 104659
FILE *in = fopen(inFile, "r");
FILE *out = fopen(outFile, "w");
int D[MAX_N + 1][ALPHABET];
bool Adj[ALPHABET][ALPHABET];
int main() {
int N, M, i, j, k;
char C1, C2;
fscanf(in, "%d %d\n", &N, &M);
for(i = 1; i <= M; i++) {
fscanf(in, "%c %c\n", &C1, &C2);
Adj[C1-'a'][C2-'a'] = Adj[C2-'a'][C1-'a'] = 1;
}
/*for(i = 0; i < ALPHABET; i++) {
for(j = 0; j < ALPHABET; j++) {
fprintf(out, "%d", Adj[i][j]);
}
fprintf(out, "\n");
}*/
for(i = 0; i < ALPHABET; i++) D[1][i] = 1;
for(i = 2; i <= N; i++) {
for(j = 0; j < ALPHABET; j++) {
for(k = 0; k < ALPHABET; k++) {
if(!Adj[j][k]) {
D[i][j] += D[i-1][k];
}
}
D[i][j] %= MOD;
}
}
int Ans = 0;
for(i = 0; i < ALPHABET; i++)
Ans += D[N][i];
fprintf(out, "%d\n", Ans % MOD);
fclose(in);
fclose(out);
return 0;
}