Pagini recente » Cod sursa (job #1385019) | Cod sursa (job #2426964) | Cod sursa (job #2143432) | Cod sursa (job #1847564) | Cod sursa (job #1534591)
#include <stdio.h>
#define SIGMA 26
#define MAX_N 1000
#define MOD 104659
int restrictie[SIGMA][SIGMA];
int cuvinte[MAX_N][SIGMA];
void calcCuvinte(int n) {
int i, j, k;
for (i = 0; i < SIGMA; i++)
cuvinte[0][i] = 1;
for (i = 1; i < n; i++)
for (j = 0; j < SIGMA; j++)
for (k = 0; k < SIGMA; k++)
if (!restrictie[k][j]) {
cuvinte[i][j] += cuvinte[i - 1][k];
cuvinte[i][j] %= MOD;
}
}
void printAns(int n, FILE *out) {
int ans = 0, i;
for (i = 0; i < SIGMA; i++) {
ans += cuvinte[n - 1][i];
ans %= MOD;
}
fprintf(out, "%d\n", ans);
}
int main() {
int n, m, i;
char a, b;
FILE *in, *out;
in = fopen("nrcuv.in", "r");
fscanf(in, "%d %d", &n, &m);
fgetc(in);
for (i = 1; i <= m; i++) {
a = fgetc(in);
fgetc(in);
b = fgetc(in);
fgetc(in);
restrictie[a - 'a'][b - 'a'] = 1;
restrictie[b - 'a'][a - 'a'] = 1;
}
fclose(in);
calcCuvinte(n);
out = fopen("nrcuv.out", "w");
printAns(n, out);
fclose(out);
return 0;
}