Pagini recente » Cod sursa (job #3286096) | Cod sursa (job #2959565) | Cod sursa (job #2928434) | Cod sursa (job #3199312) | Cod sursa (job #3298010)
#include <bits/stdc++.h>
using namespace std;
ifstream f("nrcuv.in");
ofstream g("nrcuv.out");
const int MOD = 104659;
const int SIGMA = 26;
const int MAX_N = 1'000;
bool c[SIGMA + 1][SIGMA + 1];
int dp[MAX_N + 1][SIGMA + 1];
int n, m;
char l1, l2;
/// dp[i][j] - numarul de cuvinte de lungime i care se termina cu litera j
int main() {
f >> n >> m;
f.get();
for (int i = 0; i < SIGMA; i++)
dp[1][i] = 1;
while (m--) {
f >> l1;
f.get();
f >> l2;
f.get();
c[l1 - 'a'][l2 - 'a'] = c[l2 - 'a'][l1 - 'a'] = 1;
}
for (int i = 2; i <= n; i++)
for (int j = 0; j < SIGMA; j++)
for (int l = 0; l < SIGMA; l++)
if (!c[l][j])
dp[i][j] = (dp[i][j] + dp[i - 1][l]) % MOD;
dp[0][0] = 0;
for (int i = 0; i < SIGMA; i++)
dp[0][0] = (dp[0][0] + dp[n][i]) % MOD;
g << dp[0][0] << "\n";
f.close();
g.close();
return 0;
}