Cod sursa(job #529579)

Utilizator Bit_MasterAlexandru-Iancu Caragicu Bit_Master Data 5 februarie 2011 14:42:07
Problema Lista lui Andrei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
/*
	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 = 27;
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;
}