Cod sursa(job #567063)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 29 martie 2011 18:07:54
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <stdio.h>
#include <string.h>
FILE *f=fopen("nrcuv.in","r");
FILE *g=fopen("nrcuv.out","w");
int n,m;
long op[2][26];
char rel[26][26];

void init(){
	for(register int i=0;i<26;i++)
		op[0][i]=1;
}

int main(void){
	register int i,j;

	fscanf(f,"%d %d\n",&n,&m);
	char c1,c2;
	for(i=1;i<=m;i++){
		fscanf(f,"%c %c\n",&c1,&c2);
		rel[c1-'a'][c2-'a']='1';
		rel[c2-'a'][c1-'a']='1';
	}
	fclose(f);

	init();
	for(register int k=2;k<=n;k++){
	   for(i=0;i<26;i++){
		for(j=0;j<26;j++){
		    if(rel[i][j]!='1'){
		      op[1][i]+=op[0][j];
		      op[1][i]%=104659;
		    }
		}
	   }
	   memcpy(op[0],op[1],26*4);
	   memset(op[1],0,sizeof(op[1]));
	}

	long int sum=0;
	for(i=0;i<26;i++){
		sum+=op[0][i];
		sum%=104659;
	}
	fprintf(g,"%ld",sum%104659);
	fclose(g);
	return 0;
}