Cod sursa(job #399155)

Utilizator AndreyPAndrei Poenaru AndreyP Data 19 februarie 2010 21:57:23
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<stdio.h>
#define N 1003
#define C 26
#define M 104659
short n,m;
long a[N][C];
char e[C][C];
void citire()
{
	scanf("%hd%hd\n",&n,&m);
	short i;
	char c1,c2;
	for(i=0; i<m; ++i)
	{
		scanf("%c %c\n",&c1,&c2);
		c1-='a';
		c2-='a';
		e[c1][c2]=1;
		e[c2][c1]=1;
	}
}
void rezolva()
{
	short i,j,t;
	for(i=0; i<C; ++i)
		a[1][i]=1;
	for(i=2; i<=n; ++i)
	{
		for(j=0; j<C; ++j)
		{
			for(t=0; t<C; ++t)
			{
				if(e[j][t]==1)
					continue;
				a[i][j]+=a[i-1][t];
				if(a[i][j]>=M)
					a[i][j]-=M;
			}
		}
	}
}
void scrie()
{
	long rez=0;
	short i;
	for(i=0; i<C; ++i)
	{
		rez+=a[n][i];
		if(rez>=M)
			rez-=M;
	}
	printf("%ld\n",rez);
}
int main()
{
	freopen("nrcuv.in","r",stdin);
	freopen("nrcuv.out","w",stdout);

	citire();
	rezolva();
	scrie();

	return 0;
}