Cod sursa(job #675952)

Utilizator mottyMatei-Dan Epure motty Data 8 februarie 2012 14:58:02
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>

using namespace std;

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

const int ALPH = 28;
const int N = 1001;
const int MOD = 104659;

int n, m;
long long d[ALPH][N], sum;
int v[ALPH][ALPH];

inline int index(char x)
{
	return (x - 'a');
}

void Read()
{
	in >> n >> m;

	for (int i = 1; i <= m; ++i)
	{
		char a, b;
		in >> a >> b;

		v[index(a)][index(b)] = v[index(b)][index(a)] = 1;
	}
}

void Solve()
{
	int lal = index('z');
	for (int i = 0; i <= lal; ++i)
		d[i][1] = 1;

	for (int i = 2; i <= n; ++i)
		for (int j = 0; j <= lal; ++j)
			for (int k = 0; k <= lal; ++k)
				if (!v[k][j])
				{
					d[j][i] += d[k][i-1];
					if (d[j][i] >= MOD)
						d[j][i] -= MOD;
				}
}

void Print()
{
	int lal = index('z');
	for (int i = 0; i <= lal; ++i)
		sum = (sum + d[i][n])%MOD;

	out << sum << "\n";
}

int main()
{
	Read();
	Solve();
	Print();

	return 0;
}