Cod sursa(job #3235013)

Utilizator Niku_StelistuAndrei Nicula Niku_Stelistu Data 13 iunie 2024 15:25:35
Problema Lista lui Andrei Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>

using namespace std;

const int N = 1000, MOD = 104659, AZ = 26;
bool interzis[AZ][AZ];
int dp[N + 1][AZ];

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

    int n, m;
    in >> n >> m;
    for (int i = 0; i < m; i ++)
    {
        char l1, l2;
        in >> l1 >> l2;
        int a = l1 - 'a', b = l2 - 'a';
        if (!interzis[a][b])
        {
            interzis[a][b] = interzis[b][a] = true;
        }
    }
    for (int j = 0; j < AZ; j ++)
    {
        dp[1][j] = 1;
    }
    for (int i = 2; i <= n; i ++)
    {
        for (int j = 0; j < AZ; j ++)
        {
            for (int k = 0; k < AZ; k ++)
            {
                if (!interzis[j][k])
                {
                    dp[i][j] = (dp[i][j] + dp[i - 1][k]) % MOD;
                }
            }
        }
    }
    int s = 0;
    for (int j = 0; j < AZ; j ++)
    {
        s = (s + dp[n][j]) % MOD;
    }
    out << s;

    in.close();
    out.close();

    return 0;
}