Pagini recente » Cod sursa (job #1781143) | Cod sursa (job #3308926) | Cod sursa (job #980837) | Cod sursa (job #3336964) | Cod sursa (job #3313726)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
const int MOD = 104659;
int main() {
ifstream fin("nrcuv.in");
ofstream fout("nrcuv.out");
int N, M;
fin >> N >> M;
bool forbidden[26][26];
memset(forbidden, false, sizeof(forbidden));
for (int i = 0; i < M; ++i) {
char a, b;
fin >> a >> b;
int x = a - 'a';
int y = b - 'a';
forbidden[x][y] = true;
forbidden[y][x] = true;
}
vector<int> dp_prev(26, 1), dp_curr(26, 0);
for (int i = 2; i <= N; ++i) {
fill(dp_curr.begin(), dp_curr.end(), 0);
for (int cur = 0; cur < 26; ++cur) {
for (int pre = 0; pre < 26; ++pre) {
if (!forbidden[pre][cur]) {
dp_curr[cur] = (dp_curr[cur] + dp_prev[pre]) % MOD;
}
}
}
dp_prev = dp_curr;
}
int total = 0;
for (int c = 0; c < 26; ++c)
total = (total + dp_prev[c]) % MOD;
fout << total << "\n";
return 0;
}