Cod sursa(job #469583)

Utilizator hendrikHendrik Lai hendrik Data 8 iulie 2010 13:10:43
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

#define REP(i,n) for (int i=0;i<(n);i++)
#define MOD 104659
#define N 1010
int n,m,f[N][30],ans;
char a[2],b[2];
bool mp[30][30];

void open(){
	freopen("nrcuv.in","r",stdin);
	freopen("nrcuv.out","w",stdout);
}

void input(){
	scanf("%d%d",&n,&m);
	REP(i,m){
		scanf("%s%s",a,b);
		mp[a[0]-'a'][b[0]-'a']=1;
		mp[b[0]-'a'][a[0]-'a']=1;
	}
}

void add(int &a,int b){
	a+=b;
	if (a>=MOD) a%=MOD;
}

int dp(int x,int y){
	if (x==n-1) return 1;
	if (f[x][y]!=-1) return f[x][y];
	int res=0;
	REP(i,26){
		if (mp[y][i]) continue;
		add(res,dp(x+1,i));
	}
	return f[x][y]=res;
}

void solve(){
	memset(f,-1,sizeof(f));
	ans=0;
	for (int i=0;i<26;i++){
		add(ans,dp(0,i));
	}
	printf("%d\n",ans);
}

int main(){
	open();
	input();
	solve();
	//system("pause");
	return 0;
}