Cod sursa(job #46188)

Utilizator mika17Mihai Alex Ionescu mika17 Data 2 aprilie 2007 13:31:07
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <stdio.h>
#define MOD 104659
#define NLIT 26
#define fin "nrcuv.in"
#define fout "nrcuv.out"
#define NMAX 1001
#define FOR(i,a,b) for(int i = a ; i < b ; ++i)
int s[NMAX][NLIT],a[NLIT][NLIT],N,M;

void init()
{
 int i;
 for(i = 0 ; i<NLIT ;++i)
    a[i][i] = 1;
 for(i = 0 ; i< NLIT - 1; ++i)
   for(int j = i+1 ;j<NLIT ; ++j)
      a[i][j] = a[j][i] = 1;
}

void readData()
{
 freopen(fin,"r",stdin);
 scanf("%d %d\n",&N,&M);
 FOR(i,0,M)
 {
  char c1,c2;
  scanf("%c %c\n",&c1,&c2);
  int x = c1 - 'a' , y = c2 - 'a';
  a[x][y] = a[y][x] = 0;
 }
 fclose(stdin);
}

void buildSol()
{
 int i;
 for(i = 0 ; i<NLIT ;++i)
    s[1][i] = 1;
 for(i = 2 ; i<=N ;++i)
    for(int j = 0 ; j<NLIT ; ++j)
       for(int k = 0 ; k < NLIT ; ++k)
	  if(a[j][k]) s[i][j] = s[i][j] + s[i-1][k] % MOD;
}

void writeData()
{
  int sum = 0;
  for(int i=0;i<NLIT;sum+=s[N][i++]);
  freopen(fout,"w",stdout);
  printf("%d\n",sum % MOD);
  fclose(stdout);
}

int main()
{
 init();
 readData();
 buildSol();
 writeData();
 return 0;
}