Cod sursa(job #2092769)

Utilizator copanelTudor Roman copanel Data 22 decembrie 2017 12:07:30
Problema Lista lui Andrei Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.89 kb
/* ( ͡° ͜ʖ ͡°) */
#include <stdio.h>
#include <stdbool.h>

#define MOD 104659

bool mat['z' + 1]['z' + 1];
int ap[1001]['z' + 1];

int main() {
	FILE *fin, *fout;
	int n, m, i;
	int uniq;
	unsigned char a, b;
	int r;

	fin = fopen("nrcuv.in", "r");
	fscanf(fin, "%d%d ", &n, &m);

	uniq = 0;
	for (i = 0; i < m; i++) {
		a = fgetc(fin);
		fgetc(fin);
		b = fgetc(fin);
		fgetc(fin);
		if (!mat[a][b]) {
			mat[a][b] = true;
			uniq++;
		}
		if (!mat[b][a]) {
			mat[b][a] = true;
			uniq++;
		}
	}
	fclose(fin);

	for (a = 'a'; a <= 'z'; a++)
		ap[1][a] = 1;

	for (i = 2; i <= n; i++) {
		for (a = 'a'; a <= 'z'; a++) {
			for (b = 'a'; b <= 'z'; b++) {
				if (!mat[a][b]) {
					ap[i][a] = (ap[i][a] + ap[i - 1][b]) % MOD;
				}
			}
		}
	}

	r = 0;
	for (a = 'a'; a <= 'z'; a++) {
		r = (r + ap[n][a]) % MOD;
	}

	fout = fopen("nrcuv.out", "w");
	fprintf(fout, "%d", r);
	fclose(fout);
	return 0;
}