Cod sursa(job #343799)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 27 august 2009 13:23:20
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<stdio.h>
#include<vector>
#define M 104659
using namespace std;
vector <int> v[30];
char c1[5],c2[5];
int n,m,i,j,k,sol,ok[30][30],s1[30],s2[30],*ca,*cn,*cv;
void read(),solve();
int main()
{
	read();
	solve();
	return 0;
}
void read()
{
	freopen("nrcuv.in","r",stdin);
	freopen("nrcuv.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(i=0;i<26;i++)
		for(j=0;j<26;j++)
			ok[i][j]=1;
	for(;m;m--)
	{
		scanf("%s%s",c1,c2);
		i=c1[0]-'a';j=c2[0]-'a';
		ok[i][j]=ok[j][i]=0;
	}
	for(i=0;i<26;i++)
		for(j=0;j<26;j++)
			if(ok[i][j])v[i].push_back(j);
		
	
}
void solve()
{
	vector<int>::iterator it;
	cv=s1;cn=s2;
	for(i=0;i<26;i++)cv[i]=1;
	for(k=1;k<n;k++)
	{
		for(i=0;i<26;i++)
		{
			cn[i]=0;
			for(it=v[i].begin();it!=v[i].end();it++)
				cn[i]+=cv[*it];
			cn[i]%=M;
		}
		ca=cv;cv=cn;cn=ca;
	}
	for(i=0;i<26;i++)sol+=cv[i];
	sol%=M;
	printf("%d\n",sol);
}