Cod sursa(job #479999)

Utilizator crushackPopescu Silviu crushack Data 25 august 2010 23:21:15
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <stdio.h>
#include <string.h>

const char IN[]   ="nrcuv.in";
const char OUT[]  ="nrcuv.out";
const int mod = 104659;
int N,M;
int a[2][26];
bool c[26][26];

int rec()
{
	int i,j,k,p1,p2,s;p1=0;p2=1;
	for (i=0;i<26;i++)
		a[1][i]=1;
	for (i=1;i<N;i++)
	{
		memset(a[p1],0,sizeof(a[p1]));
		for (j=0;j<26;j++)
			for (k=0;k<26;k++)
				if ( !c[j][k] )
					a[p1][j]=  (a[p1][j]+a[p2][k])%mod;
		int tmp=p1;
		p1=p2;
		p2=tmp;
	}
	s=0;
	for (i=0;i<26;i++)
		s= (s+a[p2][i])%mod;
	return s;
}

void citire()
{
	int i;char x,y;
	freopen(IN,"r",stdin);
	scanf("%d%d\n",&N,&M);
	for (i=0;i<M;i++)
		scanf("%c%c%c\n",&x,&y,&y),
		c[x-'a'][y-'a']=c[y-'a'][x-'a']=1;
	fclose(stdout);
}

void scriere(int x)
{
	freopen(OUT,"w",stdout);
	printf("%d\n",x);
	fclose(stdout);
}

int main()
{
	citire();
	scriere(rec());
	return 0;
}