Cod sursa(job #1018260)

Utilizator ELHoriaHoria Cretescu ELHoria Data 29 octombrie 2013 09:55:17
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
#include <cmath>
#include <algorithm>
#include <vector>
#define pii pair<int,int>
#define mp make_pair
#define x first
#define y second
#define i64 long long
   
using namespace std;
   
  
const int nmax = 1002, mod = 104659;
int N, M;
int bad[26];
int dp[2][26];

inline void getMod(int &val) {
	val -= val < mod ? 0 : mod;
}
int main()
{
    freopen("nrcuv.in","r",stdin);
    freopen("nrcuv.out","w",stdout);
    scanf("%d %d\n",&N,&M);
	char a, b;
    for(int i = 1;i <= M;i++) {
		scanf("%c %c\n",&a,&b);
		bad[a - 'a'] |= 1<<(b - 'a');
		bad[b - 'a'] |= 1<<(a - 'a');
	}

	for(int i = 0;i < 26;i++) {
		dp[0][i] = 1;
	}
	int line = 0;
	for(int i = 2;i <= N;i++,line ^= 1) {
		for(int j = 0;j < 26;j++) {
			dp[1 - line][j] = 0;
			for(int k = 0;k < 26;k++) {
				if((bad[k]>>j) & 1) continue;
				dp[1 - line][j] += dp[line][k];
				getMod(dp[1 - line][j]);
			}
		}
	}

	int ans = 0;
	for(int i = 0;i < 26;i++) {
		ans += dp[line][i];
	}
	
	ans %= mod;
	printf("%d\n",ans);	
	return 0;
}