Cod sursa(job #790169)

Utilizator stef1995mmarcu stefan ovidiu stef1995m Data 20 septembrie 2012 16:23:09
Problema Lista lui Andrei Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<iostream>
#include<fstream>
const int modul=104659;
using namespace std;
int n,m,i,j,trans[30][30],sol[30][30],z[30][30],k,s;
char a,b;
void prod(int x[30][30],int y[30][30])
{
	for(i=1;i<=26;i++)
		for(j=1;j<=26;j++)
			z[i][j]=0;
	for(i=1;i<=26;i++)
		for(j=1;j<=26;j++)
		{
			for(k=1;k<=26;k++)
			{
				z[i][j]+=x[i][k]*y[k][j];
				z[i][j]=z[i][j]%modul;
			}
		}
	for(i=1;i<=26;i++)
		for(j=1;j<=26;j++)
			x[i][j]=z[i][j];
}
void mult(int power)
{
	while(power)
	{
		if(power&1==1)
			prod(sol,trans);
		prod(trans,trans);
		power>>=1;
	}
}
int main()
{
	freopen("nrcuv.in","r",stdin);
	freopen("nrcuv.out","w",stdout);
	scanf("%d %d\n",&n,&m);
	for(i=1;i<=26;i++)
		for(j=1;j<=26;j++)
		{
			trans[i][j]=1;
			sol[i][j]=1;
		}
	for(i=1;i<=m;i++)
	{
		scanf("%c %c\n",&a,&b);
		trans[a-'a'+1][b-'a'+1]=trans[b-'a'+1][a-'a'+1]=0;
	}
	mult(n-1);
	for(i=1;i<=26;i++)
		s+=sol[1][i];
	s=s%modul;
	printf("%d\n",s);
	return 0;
}