Pagini recente » Cod sursa (job #1226625) | Cod sursa (job #1104874) | Cod sursa (job #1527129) | Cod sursa (job #1301908) | Cod sursa (job #766951)
Cod sursa(job #766951)
#include <iostream>
#include <fstream>
using namespace std;
#define nmax 1005
#define wmax 250
ifstream f("nrcuv.in");
ofstream g("nrcuv.out");
int n, p, viz[wmax][wmax], dp[nmax][wmax];
void citeste(){
f >> n >> p;
for(int i=1; i<=p; i++){
char a, b;
f >> a >> b;
viz[a][b] = 1;
viz[b][a] = 1;
}
}
void rezolva(){
//dp[i][j] = numarul de siruri de lungime i care au pe ultima pozitie litera j;
for(int i='a'; i<='z'; i++) dp[1][i] = 1;
for(int i=2; i<=n; i++){
for(int j='a'; j<='z'; j++){
for(int k='a'; k<='z'; k++){
if (viz[j][k] == 1) continue;
dp[i][j] += dp[i-1][k];
if (dp[i][j] >= 104659) dp[i][j] = dp[i][j] % 104659;
}
}
}
int rez = 0;
for(int i='a'; i<='z'; i++){
rez += dp[n][i];
if (rez >= 104659) rez = rez % 104659;
}
g << rez << "\n";
}
int main(){
citeste();
rezolva();
f.close();
g.close();
return 0;
}