Cod sursa(job #5436)

Utilizator gigi_becaliGigi Becali gigi_becali Data 12 ianuarie 2007 14:52:44
Problema Lista lui Andrei Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <cstdio>

int n, m, x[1024][27][128];
int sol[128];
int c[128][128];

void add(int A[], int B[])  
{  
       int i, t = 0;  
       for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)  
              A[i] = (t += A[i] + B[i]) % 10;  
       A[0] = i - 1;  
}  
void mul(int A[], int B)  
{  
      int i, t = 0;  
     for (i = 1; i <= A[0] || t; i++, t /= 10)  
              A[i] = (t += A[i] * B) % 10;  
	A[0] = i - 1;  
} 

void sub(int A[], int B[])  
{  
       int i, t = 0;  
       for (i = 1; i <= A[0]; i++)  
               A[i] += (t = (A[i] -= B[i] + t) < 0) * 10;  
       for (; A[0] > 1 && !A[A[0]]; A[0]--);  
}  

void citire()
{
	freopen("nrcuv.in", "r", stdin);
	scanf("%d %d\n", &n, &m);
	int i;
	for(i=1;i<=m;i++)
	{
		char p, q;
		scanf("%c %c\n", &p, &q);
		c[p][q]=1;
		c[q][p]=1;
	}
}
	//long long  x[1024][27];
	//long long sol=0;
	/*
void calc()
{
	int i, j, k;
	sol=0;
	
	for(i=0;i<26;i++)x[1][i]=1;
	
	for(i=2;i<=n;i++)
		for(j=0;j<26;j++)
			for(k=0;k<26;k++) if(!c[j+'a'][k+'a']) x[i][j]+=x[i-1][k];
			
	for(i=0;i<26;i++) sol+=x[n][i];
	printf("%lld\n", sol);
}
*/


void calcul()
{
	sol[0]=0;
	sol[1]=0;
	int i, j, k;
		
		
	for(i=0;i<26;i++) { x[1][i][0]=1; x[1][i][1]=1;}
	
	for(i=2;i<=n;i++)
		for(j=0;j<26;j++) 
			for(k=0;k<26;k++)
				if(!c[j+'a'][k+'a'] && !c[j+'a'][k+'a']) add(x[i][j], x[i-1][k]);
				
		
	for(i=0;i<26;i++) add(sol, x[n][i]);
	
	for(i=sol[0];i>0;i--) printf("%d", sol[i]);
	printf("\n");
}

int main()
{
	freopen("nrcuv.out", "w", stdout);
	citire();
	calcul();
	return 0;
}