Cod sursa(job #66840)

Utilizator floringh06Florin Ghesu floringh06 Data 21 iunie 2007 13:19:37
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
using namespace std;

#define MAX_N 1005
#define MAX_L 30
#define MOD 104659

#include <stdio.h>
#include <fstream>

FILE *fin=freopen("nrcuv.in","r",stdin),
     *fout=freopen("nrcuv.out","w",stdout);
     
int i,j,n,m,k;
char c1,c2;
long long  v[MAX_N][MAX_L];
int o[MAX_L][MAX_L];
long long sol;

     
int main()
{
   scanf("%d %d\n",&n,&m);
   memset(o,0,sizeof(o));
   for (i=1; i<=m; i++) {
    scanf("%c %c\n",&c1,&c2);
    j=c1-96; k=c2-96;
    o[j][k]=1; o[k][j]=1;
   }
   for (j=1; j<=26; j++)
    v[1][j]=1;
   for (i=1; i<=n; i++)
    for (j=1; j<=26; j++) 
     for (k=1; k<=26; k++)
      if (o[j][k]==0 && o[k][j]==0) v[i][j]=(v[i][j]+v[i-1][k])%MOD;  
   sol=0;   
   for (i=1; i<=26; i++)
    sol=(sol+v[n][i])%MOD;
   printf("%lld\n",sol);
   
   fclose(stdin); fclose(stdout);
   
   return 0;
}