Cod sursa(job #2215251)

Utilizator IulianOleniucIulian Oleniuc IulianOleniuc Data 21 iunie 2018 14:34:25
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <vector>
#include <fstream>

#define ALPHA 30
#define NMAX 1010
#define MOD 104659

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

int n, m;
bool ad[ALPHA][ALPHA];

int sol;
int dp[NMAX][ALPHA];
std::vector<int> v[ALPHA];

int main() {
    char x, y;

    fin >> n >> m;
    for (int i = 0; i < m; i++) {
        fin >> x >> y;
        ad[x - 'a'][y - 'a'] =
        ad[y - 'a'][x - 'a'] = true;
    }

    for (int i = 0; i < 26; i++)
        for (int j = 0; j < 26; j++)
            if (!ad[i][j])
                v[i].push_back(j);

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

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

    for (int j = 0; j < 26; j++)
        sol = (sol + dp[n][j]) % MOD;
    fout << sol << '\n';

    fout.close();
    return 0;
}