Cod sursa(job #3316621)

Utilizator traian_Dobrescu Traian traian_ Data 19 octombrie 2025 14:37:13
Problema Lista lui Andrei Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <iostream>
#include <cmath>
#include <vector>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <queue>
#include "stdio.h"
using namespace std;

#define ll long long
const int inf = 0x3f3f3f3f;
const int mod = 104659;

int main() {
    #ifdef DEBUG
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
    #endif //DEBUG

    #ifdef  INFOARENA
    freopen("nrcuv.in", "r", stdin);
    freopen("nrcuv.out", "w", stdout);
    #endif  //INFOARENA

    ll m, n;
    cin >> n >> m;
    
    bool forbid[26][26] = {};

    for (int i = 0; i < m; i++) {
        char x, y;
        cin >> x >> y;
        forbid[x-'a'][y-'a'] = true;
        forbid[y-'a'][x-'a'] = true;
    }

    vector<int> cnt(26, 1);
    for(int k=0;k<n-1;k++) {
        vector<int> ncnt(26);
        for(int i=0;i<26;i++) {
            int s = 0;
            for(int j=0;j<26;j++) {
                if(forbid[j][i]) continue;
                
                s = (s + cnt[j]) % mod;
            }
            ncnt[i] = s;
        }
        cnt = ncnt;
    }
    int s = 0;
    for(int i=0;i<26;i++) {
        s = (s + cnt[i]) % mod;
    }

    cout << s;
    return 0;
}