Pagini recente » Istoria paginii utilizator/ionumrginean | Cod sursa (job #133075) | Profil malex | Profil malex | Cod sursa (job #1465718)
#include <stdio.h>
#include <stdlib.h>
#define MOD 104659
#define S 0
#define E 25
unsigned long long dp[1001][26];
unsigned short int invalid[26][26];
inline void initdp() {
int i;
for (i = S; i <= E; i++) {
dp[1][i] = 1;
}
}
inline unsigned long dosum(int dp_idx, int c) {
int i;
unsigned long s = 0;
for (i = S; i <= E; i++) {
if (! invalid[i][c]) {
s += dp[dp_idx][i];
}
}
return s;
}
int main() {
int n, k, i, c;
char buf[8], c1, c2;
unsigned long s = 0;
FILE *fi, *fo;
fi = freopen("nrcuv.in", "r", stdin);
fo = freopen("nrcuv.out", "w", stdout);
initdp();
scanf("%d %d", &n, &k);
fgets(buf, 8, stdin);
for (i = 0; i < k; i++) {
fgets(buf, 8, stdin);
sscanf(buf, "%c %c", &c1, &c2);
invalid[c1 - 'a'][c2 - 'a'] = 1;
invalid[c2 - 'a'][c1 - 'a'] = 1;
}
for (i = 2; i <= n; i++) {
for (c = S; c <= E; c++) {
dp[i][c] = dosum(i - 1, c);
}
}
s = 0;
for (i = S; i <= E; i++) {
s += dp[n][i];
s %= MOD;
}
printf("%lu\n", s);
fclose(fi);
fclose(fo);
return 0;
}