Cod sursa(job #3160371)

Utilizator octavian202Caracioni Octavian Luca octavian202 Data 23 octombrie 2023 20:20:11
Problema Lista lui Andrei Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <fstream>
#include <set>

using namespace std;

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

const int MOD = 104659;

int dp[1003][30];
bool nuevoie[30][30];
set<int> ch[30];

int main() {

    int n, m;
    fin >> n >> m;
    while (m--) {
        char ch1, ch2;
        fin >> ch1 >> ch2;
        int a = ch1 - 'a', b = ch2 - 'a';
        nuevoie[a][b] = nuevoie[b][a] = true;
    }

    for (int a = 0; a <= ('z' - 'a'); a++) {
        for (int b = 0; b <= ('z' - 'a'); b++) {
            if (!nuevoie[a][b]) {
                ch[a].insert(b);
                ch[b].insert(a);
            }
        }
    }

    for (int c = 0; c <= ('z' - 'a'); c++)
        dp[1][c] = 1;

    for (int l = 2; l <= n; l++) {
        for (int c = 0; c <= ('z' - 'a'); c++) {
            for (auto cv : ch[c]) {
                dp[l][c] = (dp[l][c] % MOD +  dp[l - 1][cv] % MOD) % MOD;
            }
        }
    }

    int res = 0;
    for (int c = 0; c <= ('z' - 'a'); c++) {
        res = (res % MOD + dp[n][c] % MOD) % MOD;
    }
    fout << res;

    return 0;
}