Cod sursa(job #2941232)

Utilizator LucaMuresanMuresan Luca Valentin LucaMuresan Data 17 noiembrie 2022 12:55:00
Problema Lista lui Andrei Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <bits/stdc++.h>

using namespace std;

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

#define int long long

const int mod = 104659;
int dp[1001][26]; /// dp[n][k] - primele n, a[n] = k
bitset<26>ok[26];

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

    for (int i=0; i<26; i++)
    {
        for (int j=0; j<26; j++)
            ok[i][j] = true;
    }

    int cnt = 0;

    while (m--)
    {
        char a, b;
        in >> a >> b;

        int x = a - 'a', y = b - 'a';
        ok[x][y] = ok[y][x] = false;
    }

    for (int i=0; i<26; i++)
        dp[1][i] = 1;
    for (int i=2; i<=n; i++)
    {
        for (int j=0; j<26; j++)
        {
            for (int k=0; k<26; k++)
            {
                if (ok[j][k])
                    dp[i][k] += dp[i-1][j], dp[i][k] %= mod;
            }
        }
    }

    long long ans = 0;
    for (int i=0; i<26; i++)
        ans += dp[n][i], ans %= mod;
    out << ans;

    return 0;
}