Pagini recente » Cod sursa (job #1355011) | Cod sursa (job #2513195) | Cod sursa (job #444394) | Cod sursa (job #2804813) | Cod sursa (job #2667077)
#include <stdio.h>
#include <stdint.h>
typedef uint8_t u_int8_t;
typedef uint32_t u_int32_t;
#define M 104659
void read_u_int32_t(FILE *stream, u_int32_t *nr) {
*nr = 0;
u_int8_t ch;
while ((ch = fgetc(stream)) && ('0' <= ch && ch <= '9')) {
*nr *= 10;
*nr += ch - '0';
}
}
void getchars(FILE *stream, u_int8_t *ch1, u_int8_t *ch2) {
*ch1 = fgetc(stream);
fgetc(stream);
*ch2 = fgetc(stream);
fgetc(stream);
}
u_int8_t rules[27][27];
u_int32_t mem[1001][27];
int main() {
u_int32_t n, m;
u_int8_t ch1, ch2;
{
FILE *in = fopen("nrcuv.in", "r");
read_u_int32_t(in, &n);
read_u_int32_t(in, &m);
{
int32_t i;
for (i = 0; i < m; ++i) {
getchars(in, &ch1, &ch2);
ch1 -= 'a';
ch2 -= 'a';
rules[ch1][ch2] = 1;
rules[ch2][ch1] = 1;
}
}
fclose(in);
}
{
int32_t i;
for (i = 0; i < 26; ++i) {
mem[1][i] = 1;
}
}
{
int32_t i, j, k;
for (i = 2; i <= n; ++i) {
for (j = 0; j < 26; ++j) {
for (k = 0; k < 26; ++k) {
if (rules[j][k] == 0) {
mem[i][j] += mem[i - 1][k];
mem[i][j] %= M;
}
}
}
}
}
u_int32_t res = 0;
{
int32_t i;
for (i = 0; i < 26; ++i) {
res += mem[n][i];
res %= M;
}
}
{
FILE *out = fopen("nrcuv.out", "w");
fprintf(out, "%u", res);
fclose(out);
}
return 0;
}