Cod sursa(job #6034)

Utilizator peanutzAndrei Homorodean peanutz Data 16 ianuarie 2007 20:45:24
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <stdio.h>
#include <memory.h>

#define HASHMAX 40
#define NMAX 4000
#define mod 104659

long prec[NMAX], curent[NMAX];
long n, m;
long hash[HASHMAX][HASHMAX];


void read()
{
int i;
char a, b;

scanf("%ld %ld\n", &n, &m);

for(i = 0; i < m; ++i)
	{
		scanf("%c %c\n", &a, &b);

		hash[(a-'a')+1][(b-'a')+1] = 1;
		hash[(b-'a')+1][(a-'a')+1] = 1;
	}
}


void dinamic()
{
int i, j, k;


for(i = 1; i < NMAX; ++i)
	prec[i] = 1;


for(i = 2; i <= n; ++i)
	{
		for(k = 1; k < 27; ++k)
			for(j = 1; j < 27; ++j)
				if(!hash[k][j])
					{
						curent[k] += prec[j];
						curent[k] %= mod;
					}

		memcpy(prec, curent, 500*3);
		memset(curent, 0, sizeof(curent));
	}
}



void write()
{
unsigned long count = 0, i;


for(i = 1; i < 27; ++i)
	count += prec[i];


count %= mod;


printf("%lu\n", count);
}




void print_a(long a[NMAX][NMAX])
{
int i, j;

for(i = 1; i < NMAX; ++i)
	{
		for(j = 1; j < NMAX; ++j)
			printf("%ld ", a[i][j]);
		printf("\n");
	}
}

int main()
{
freopen("nrcuv.in", "r", stdin);
freopen("nrcuv.out", "w", stdout);


read();


//print_a(hash);


dinamic();


write();


fclose(stdin);
fclose(stdout);

return 0;
}