Cod sursa(job #208643)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 17 septembrie 2008 17:46:21
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <stdio.h>
#include <math.h>

long v[32][32];
long x[2048][32];

int main() {
	long i, n, j, l, k, m, s;
	char a[2], b[2];
	freopen("nrcuv.in", "r", stdin);
	freopen("nrcuv.out", "w", stdout);
	
	scanf("%ld%ld", &n, &k);
	for (i = 1; i <= k; ++i) {
		scanf("%s %s", a, b);
		v[a[0] - 'a' + 1][b[0] - 'a' + 1] = v[b[0] - 'a' + 1][a[0] - 'a' + 1] = 1;
	}
	m = 26;
	for (i = 1; i <= m; ++i) {
		x[1][i] = 1;
	}
	for (l = 1; l < n; ++l) {
		for (i = 1; i <= m; ++i) {
			x[l][i] %= 104659;
			
			for (j = 1; j <= m; ++j) {
				if (v[i][j] == 0) {
					x[l + 1][j] += x[l][i];
				}
			}
		}
	}
	s = 0;
	for (i = 1; i <= m; ++i) {
		s += x[n][i];
	}
	s %= 104659;
	printf("%ld\n", s);
	return 0;
}