Cod sursa(job #3367237)

Utilizator PortallosAlexandru Vladimir Portallos Data 6 octombrie 2026 21:28:02
Problema Lista lui Andrei Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;

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

const int MOD = 104659;

int n, m;
unordered_set<int> cePoateSaUrmeze[27];
int nuVecine;

int dp[1001][27];



int main() {

    fin>>n>>m;

    for(int i = 1; i <= 26 ; i++){
        for(int j = 1; j <= 26; j++){
            cePoateSaUrmeze[i].insert(j);
        }
    }

    for(int i = 1; i <= m; i++){
        char a, b;
        fin>>a>>b;
        if(cePoateSaUrmeze[(int) (a - 'a' + 1)].find((int) (b - 'a' + 1)) != cePoateSaUrmeze[(int) (a - 'a' + 1)].end())
            cePoateSaUrmeze[(int) (a - 'a' + 1)].erase(cePoateSaUrmeze[(int) (a - 'a' + 1)].find((int) (b - 'a' + 1)));

        if(cePoateSaUrmeze[(int) (b - 'a' + 1)].find((int) (a - 'a' + 1)) != cePoateSaUrmeze[(int) (b - 'a' + 1)].end())
            cePoateSaUrmeze[(int) (b - 'a' + 1)].erase(cePoateSaUrmeze[(int) (b - 'a' + 1)].find((int) (a - 'a' + 1)));
    }

    for(int i = 1; i <= 26; i++)
        dp[1][i] = 1;


    for(int i = 2 ; i <= n ; i++){
        for(int j = 1; j <= 26; j++){
            for (int k : cePoateSaUrmeze[j])
                dp[i][j] = (dp[i][j] + dp[i-1][k]) % MOD;
        }
    }

    int sum = 0;
    for(int i = 1; i <= 26; i++){
        sum = (sum + dp[n][i]) % MOD;
    }

    fout<<sum;

    return 0;
}