Pagini recente » Cod sursa (job #1825882) | Cod sursa (job #1132828) | Cod sursa (job #2114668) | Cod sursa (job #908522) | Cod sursa (job #529829)
Cod sursa(job #529829)
/*
a[i][j] = cate cuvinte sunt de lungime i care se termina in litera j
a[i][j] = a[i-1][1] + a[i-1][2] + ... + a[i-1][27]
fiecare termen adunat daca este litera compatibila
a[1][j] = 1;
*/
#include <cstdio>
const int L = 26;
const int N = 1000;
const int R = 104659;
int n;
int a[N+1][L+1];
bool lit_proasta[L+1][L+1];
void citire()
{
int m;
char a,b;
scanf("%i%i",&n,&m);
for (int i = 1; i <= m; ++i)
{
scanf("\n%c %c",&a,&b);
lit_proasta[a-'a'+1][b-'a'+1] = true;
lit_proasta[b-'a'+1][a-'a'+1] = true;
}
}
void initializare_dinamica()
{
for (int j = 1; j <= L; ++j)
a[1][j] = 1;
}
void dinamica()
{
int r=0;
initializare_dinamica();
for (int i = 2; i <= n; ++i)
for (int j = 1; j <= L; ++j)
for (int k = 1; k <= L; ++k)
if (!lit_proasta[j][k])
a[i][j] = (a[i][j] + a[i-1][k])%R;
for (int j = 1; j <= L; ++j)
r = (r + a[n][j])%R;
printf("%i",r);
}
int main()
{
freopen("nrcuv.in","r",stdin);
freopen("nrcuv.out","w",stdout);
citire();
dinamica();
return 0;
}