Cod sursa(job #2254639)

Utilizator memecoinMeme Coin memecoin Data 5 octombrie 2018 17:37:21
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <math.h>

#define MOD 104659
 
using namespace std;

int n, m;

bool skip[26][26];

int cache[26][1024];

int count(int current, int remainingLength) {
	if (cache[current][remainingLength] != 0) {
		return cache[current][remainingLength];
	}

	if (remainingLength == 0) {
		return 1;
	}
	int result = 0;
	for (int i = 0; i < 26; ++i) {
		if (skip[current][i]) {
			continue;
		}
		result += count(i, remainingLength - 1) % MOD;
	}

	cache[current][remainingLength] = result % MOD;

	return result;
}
 
int main() {
	freopen("nrcuv.in", "r", stdin);
	freopen("nrcuv.out", "w", stdout);

	scanf("%d %d\n", &n, &m);

	for (int i = 0; i < m; ++i) {
		char x, y;
		scanf("%c %c\n", &x, &y);
		x -= 'a';
		y -= 'a';
		
		skip[x][y] = true;
		skip[y][x] = true;
	}

	int result = 0;

	for (int i = 0; i < 26; ++i) {
		result += count(i, n - 1) % MOD;
	}
	result %= MOD;

	printf("%d", result);

	return 0;
}