Pagini recente » Cod sursa (job #784519) | Cod sursa (job #656578) | Cod sursa (job #1395805) | Cod sursa (job #111259) | Cod sursa (job #1168221)
#include <fstream>
#include <cstring>
#define in "nrcuv.in"
#define out "nrcuv.out"
#define Alph_Size 26
#define Max_N 1003
#define Mod 104659
class Lista {
protected :
int N, M, DP[Max_N][Alph_Size + 3];
bool Key[Alph_Size + 3][Alph_Size + 3];
public :
void Read() {
std :: ifstream f(in);
char a, b;
memset(Key, 0, sizeof(Key));
memset(DP, 0, sizeof(DP));
f >> N >> M;
for(int i = 1; i <= M; ++i) {
f >> a >> b;
Key[a - 'a' + 1][b - 'a' + 1] = Key[b - 'a' + 1][a - 'a' + 1] = 1;
}
f.close();
}
int Solve() {
for(int i = 1; i <= Alph_Size; ++i) DP[1][i] = 1;
for(int i = 2; i <= N; ++i)
for(int j = 1; j <= Alph_Size; ++j)
for(int k = 1; k <= Alph_Size; ++k)
if(!Key[j][k]) DP[i][j] = (DP[i][j] + DP[i - 1][k]) % Mod;
int ans = 0;
for(int i = 1; i <= Alph_Size; ++i) ans = (ans + DP[N][i]) % Mod;
return ans;
}
};
int main() {
Lista obj;
std :: ofstream g(out);
obj.Read();
g << obj.Solve() << '\n';
g.close();
return 0;
}