Cod sursa(job #2913437)

Utilizator VladNANegoita Vlad-Andrei VladNA Data 14 iulie 2022 15:11:16
Problema Lista lui Andrei Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>

using namespace std;

#define NMAX 1000
#define MOD 104659
#define ALF 26

ifstream in("nrcuv.in");
ofstream out("nrcuv.out");

bool s[ALF][ALF];
int dp[NMAX][ALF];

inline int modulo(int nr) {
    if (nr >= MOD)
        nr -= MOD;
    return nr;
}

int main()
{
    int n, m;
    in >> n >> m;

    char x, y;
    for (int i = 0; i < m; ++i) {

        in >> x >> y;

        x -= 'a';
        y -= 'a';

        s[x][y] = s[y][x] = true;
    }

    for (register int j = 0; j < ALF; ++j)
        dp[0][j] = 1;

    for (register int i = 1; i < n; ++i)
        for (register int j = 0; j < ALF; ++j)
            for (register int k = 0; k < ALF; ++k)
                if (!s[k][j])
                    dp[i][k] = modulo(dp[i][k] + dp[i - 1][j]);

    int ans = 0;
    --n;
    for (register int j = 0; j < ALF; ++j)
        ans = modulo(ans + dp[n][j]);

    out << ans << '\n';
    return 0;
}