Cod sursa(job #2586230)

Utilizator mirceamaierean41Mircea Maierean mirceamaierean41 Data 20 martie 2020 01:06:09
Problema Lista lui Andrei Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>

using namespace std;

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

const int NMAX = 1003;
const int MOD = 104659;

int dp[2][26];
bool match[26][26];

int n, m, ind, s;
char a, b;

int main()
{
	fin >> n >> m;
	while (m--)
	{
		fin >> a >> b;
		match[a - 'a'][b - 'a'] = match[b - 'a'][a - 'a'] = 1;
	}

	for (int i = 0; i < 26; ++i)
		dp[0][i] = 1;

	for (int i = 2; i < n; ++i)
	{
		int ant_ind = ind;
		ind = (ind == 0);
		for (int j = 0; j < 26; ++j)
			for (int k = 0; k < 26; ++k)
				if (match[j][k] == 0)
				{
					dp[ind][j] += dp[ant_ind][k];
					if (dp[ind][j] >= MOD) dp[ind][j] -= MOD;
				}
	}
	for (int j = 0; j < 26; ++j)
		for (int k = 0; k < 26; ++k)
			if (match[j][k] == 0)
			{
				s += dp[ind][k];
				if (s >= MOD) s -= MOD;
			}
	fout << s << "\n";
	return 0;
}