Pagini recente » Cod sursa (job #1366558) | Cod sursa (job #678810) | Cod sursa (job #2722929) | Borderou de evaluare (job #2927840) | Cod sursa (job #3333097)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin("nrcuv.in");
ofstream fout("nrcuv.out");
const int MOD = 104659;
const int NMAX = 1e3 + 2;
int n, m, dp[27][NMAX];
unordered_set<int> dep[27];
signed main()
{
fin >> n >> m;
while (m--)
{
char l1, l2;
fin >> l1 >> l2;
// cout << (int)l1 - 'a' + 1 << " " << l2 << "\n";
dep[(int)l1 - 'a' + 1].insert((int)l2 - 'a' + 1);
dep[(int)l2 - 'a' + 1].insert((int)l1 - 'a' + 1);
}
// return 0;
for (int i = 1; i <= 26; i++)
{
dp[i][1] = 1;
}
int prevsum = 26, cursum = 0;
for (int i = 2; i <= n; i++)
{
for (int k = 1; k <= 26; k++)
{
dp[k][i] = prevsum;
for(auto cif: dep[k])
{
dp[k][i] = (dp[k][i] - dp[cif][i - 1]) % MOD;
}
// if(i == 2)cout << dp[k][i] << "\n";
cursum = (cursum + dp[k][i]) % MOD;
}
prevsum = cursum;
cursum = 0;
}
int ans = 0;
for(int i = 1; i <= 26; i++)
{
ans = (ans + dp[i][n]) % 104659;
}
fout << ans;
return 0;
}