Cod sursa(job #794290)

Utilizator AndreiRSStatescu Andrei Rares AndreiRS Data 6 octombrie 2012 09:37:09
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda dinamica_i Marime 0.79 kb
#include <fstream>
#include <algorithm>
using namespace std;

ifstream fi ("nrcuv.in");
ofstream fo ("nrcuv.out");

const int dim = 1002, mod = 104659;
int N, NR, D[30][dim], M[30][30];


void cit ()
{
	fi >> N >> NR;
	
	char c1, c2;
	for (int i = 1; i <= NR; i++)
	{
		fi >> c1 >> c2;
		M[c1-'a'][c2-'a'] = M[c2-'a'][c1-'a'] = 1;
	}
}

void rez ()
{
	int n, c, ca, s = 0;
	
	for (c = 0; c < 26; c++)
		D[c][1] = 1;
	
	for (n = 2; n <= N; n++)
		for (c = 0; c < 26; c++)
			for (ca = 0; ca < 26; ca++)
				if (M[c][ca] == 0)
				{
					D[c][n] += D[ca][n-1];
					if (D[c][n] >= mod)
						D[c][n] -= mod;
				}

	for (c = 0; c < 26; c++)
	{
		s += D[c][N];
		if (s >= mod)
			s -= mod;
	}
	
	fo << s;
}

int main ()
{
	cit ();
	rez ();
	return 0;
}