Pagini recente » Cod sursa (job #898538) | Cod sursa (job #3193544) | Cod sursa (job #412077) | Cod sursa (job #2073535) | Cod sursa (job #1424131)
#include <fstream>
#include <iostream>
#include <memory.h>
using namespace std;
ifstream fin("nrcuv.in");
ofstream fout("nrcuv.out");
int mem[1001][26];
int compute(const int allow[], const int& n, int k,const int last_letter){
if(k == n)
return 0;
if(last_letter != - 1 && mem[k][last_letter] != -1)
return mem[k][last_letter];
int count = 0;
for(int i = 0; i < 26; i++){
if(last_letter != i)
count = (count + 1 + compute(allow,n,k+1,i))%104659;
}
if(last_letter != -1)
return mem[k][last_letter] = count%104659;
return count%104659;
}
int main(){
int n,m;
fin >> n >> m;
bool viz[27][27];
int mem[1005][27];
memset(viz,0,sizeof(viz));
for(int i = 0; i <=n;i++)
for(int j = 0; j < 'z'-'a'; j++)
mem[i][j] = 0;
for(int i = 0 ; i < m ; i++){
char x,y;
fin >> x >> y;
viz[x-'a'][y-'a'] = true;
viz[y-'a'][x-'a'] = true;
}
long long sum =0;
for(int i = 0; i < 26; i++){
mem[n-1][i] = 1;
}
for(int i = n-1; i >=0; i--){
for(int q = 0 ; q <= 'z'-'a'; q++)
for(int j =0; j <= 'z'-'a'; j++)
if(!viz[q][j])
mem[i][q] = (mem[i][q] + mem[i+1][j])%104659;
}
int ans = 0;
for(int i = 0; i < 26; i++)
ans= (ans+mem[0][i])%104659;
fout << ans << endl;
return 0;
}