Cod sursa(job #305952)

Utilizator vlad.maneaVlad Manea vlad.manea Data 18 aprilie 2009 23:22:10
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <cstdio>
#define MOD 104659

using namespace std;

FILE *fin, *fout;

int N, M;
char x, y;
int A[32][32], L[32][32];
int NR[32][1024];

int main()
{
	fin = fopen("nrcuv.in", "r");
	fout = fopen("nrcuv.out", "w");

	fscanf(fin, "%d %d", &N, &M);
	while (M--)
	{
		fscanf(fin,"\n%c %c", &x, &y);
		A[x-'a'+1][y-'a'+1] = A[y-'a'+1][x-'a'+1] = 1;
	}

	for (int i = 1; i <= 26; ++i)
		for (int j = i; j <= 26; ++j)
			if (A[i][j] == 0)
			{
				L[i][++L[i][0]] = j;
				if (i != j)
					L[j][++L[j][0]] = i;
			}

	for (int j = 1; j <= 26; ++j)
		NR[j][1] = 1;

	for (int i = 2; i <= N; ++i)
		for (int j = 1; j <= 26; NR[j][i] %= MOD, ++j)
			for (int k = 1; k <= L[j][0]; ++k)
				NR[j][i] += NR[L[j][k]][i-1];

	for (int i = 1; i <= 26; ++i)
		NR[0][N] = NR[0][N] + NR[i][N] % MOD;

	fprintf(fout, "%d\n", NR[0][N] % MOD);

	fclose(fout);
	fclose(fin);

	return 0;
}