Pagini recente » Cod sursa (job #814298) | Cod sursa (job #564708) | Cod sursa (job #787760) | Cod sursa (job #3271548) | Cod sursa (job #2698054)
#include <fstream>
using namespace std;
const int EPSILON = 26;
const int MODULO = 104659;
const int NMAX = 1000;
bool pereche[EPSILON][EPSILON];
int dp[1 + NMAX][EPSILON];
/// DP[I][J] = NUMARUL DE CUVINTE DE LUNGIME I CARE SE TERMINA IN CARACTERUL J
int main()
{
ifstream in("nrcuv.in");
ofstream out("nrcuv.out");
int n, m;
in >> n >> m;
for (int i = 1; i <= m; i++)
{
char l1, l2;
in >> l1 >> l2;
pereche[l1 - 'a'][l2 - 'a'] = true;
pereche[l2 - 'a'][l1 - 'a'] = true;
}
for (int i = 0; i < EPSILON; i++)
{
dp[1][i] = 1;
}
for (int i = 2; i <= n; i++)
{
for (int j = 0; j < EPSILON; j++)
{
for (int k = 0; k < EPSILON; k++)
{
if (!pereche[j][k])
{
dp[i][k] += dp[i - 1][j];
dp[i][k] %= MODULO;
}
}
}
}
int sol = 0;
for (int i = 0; i < EPSILON; i++)
{
sol += dp[n][i];
sol %= MODULO;
}
out << sol << '\n';
return 0;
}