Cod sursa(job #493010)

Utilizator ooctavTuchila Octavian ooctav Data 16 octombrie 2010 18:33:59
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;

const int NMAX = 1005;
const int MODULO = 104659;
const int ALFA = 26;

int N, M;
bool comb[ALFA + 5][ALFA + 5];
int d[NMAX][ALFA + 5];
int suma = 0;

void citire()
{
	cin >> N >> M;
	char c1, c2;
	for(int i = 1 ; i <= M ; i++)
	{
		cin >> c1 >> c2;
		if(c1 > c2)
			swap(c1, c2);
		comb[c1 - 'a' + 1][c2 - 'a' + 1] = 1;
		comb[c2 - 'a' + 1][c1 - 'a' + 1] = 1;
	}
}

void dinamic()
{
	fill(d[1] + 1, d[1] + ALFA + 1, 1);
	for(int i = 2 ; i <= N ; i++)
		for(int j = 1 ; j <= ALFA ; j++)
			for(int k = 1 ; k <= ALFA ; k++)
				if(!comb[j][k])
					d[i][j] = (d[i][j] + d[i - 1][k]) % MODULO;
			
	for(int j = 1 ; j <= ALFA ; j++)
		suma = (suma + d[N][j]) % MODULO;
}

void scrie()
{
	printf("%d\n", suma);
}

int main()
{
	freopen("nrcuv.in", "r", stdin);
	freopen("nrcuv.out", "w", stdout);
	citire();
	dinamic();
	scrie();
	return 0;
}