Cod sursa(job #3313726)

Utilizator RaresAnghelAnghel Rares Mihai RaresAnghel Data 6 octombrie 2025 08:41:54
Problema Lista lui Andrei Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;

const int MOD = 104659;

int main() {
    ifstream fin("nrcuv.in");
    ofstream fout("nrcuv.out");

    int N, M;
    fin >> N >> M;

    bool forbidden[26][26];
    memset(forbidden, false, sizeof(forbidden));

    for (int i = 0; i < M; ++i) {
        char a, b;
        fin >> a >> b;
        int x = a - 'a';
        int y = b - 'a';
        forbidden[x][y] = true;
        forbidden[y][x] = true;
    }

    vector<int> dp_prev(26, 1), dp_curr(26, 0);

    for (int i = 2; i <= N; ++i) {
        fill(dp_curr.begin(), dp_curr.end(), 0);
        for (int cur = 0; cur < 26; ++cur) {
            for (int pre = 0; pre < 26; ++pre) {
                if (!forbidden[pre][cur]) {
                    dp_curr[cur] = (dp_curr[cur] + dp_prev[pre]) % MOD;
                }
            }
        }
        dp_prev = dp_curr;
    }

    int total = 0;
    for (int c = 0; c < 26; ++c)
        total = (total + dp_prev[c]) % MOD;

    fout << total << "\n";
    return 0;
}