Cod sursa(job #1491156)

Utilizator al.mocanuAlexandru Mocanu al.mocanu Data 24 septembrie 2015 21:06:23
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <stdio.h>
#include <string.h>
#include <vector>
#define MAX 1005
#define MOD 104659
using namespace std;

int n, m, i, j, k, d[MAX][30], rez;
char x, y;
vector<int> l[MAX], v[MAX];
bool a[30];

int main(){
	freopen("nrcuv.in", "r", stdin);
	freopen("nrcuv.out", "w", stdout);
	scanf("%d%d\n", &n, &m);
	for(i = 0; i < m; i++){
		scanf("%c %c\n", &x, &y);
		l[x - 'a'].push_back(y - 'a');
		l[y - 'a'].push_back(x - 'a');
	}

	for(i = 0; i < 26; i++){
		memset(a, 0, sizeof(a));
		for(j = 0; j < l[i].size(); j++)
			a[l[i][j]] = 1;
		for(j = 0; j < 26; j++)
			if(!a[j])
				v[i].push_back(j);
	}

	for(i = 0; i < 26; i++)
		d[0][i] = 1;
	
	for(i = 1; i < n; i++)
		for(j = 0; j < 27; j++)
			for(k = 0; k < v[j].size(); k++)
				d[i][j] = (d[i][j] + d[i - 1][v[j][k]]) % MOD;
	
	for(i = 0; i < 26; i++)
		rez = (rez + d[n - 1][i]) % MOD;
	printf("%d\n", rez);
	return 0;
}