Cod sursa(job #1879315)

Utilizator danyvsDan Castan danyvs Data 14 februarie 2017 20:48:29
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>

using namespace std;

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

const int NMAX = 1005;
const int DMAX = 30;
const int MOD = 104659;

int n, m;
int dp[DMAX][NMAX];
bool A[DMAX][DMAX];

void read()
{
    fin >> n >> m;
    for (int i = 1; i <= m; ++ i)
        {
         char x, y;
         fin >> x >> y;
         A[x - 'a' + 1][y - 'a' + 1] = A[y - 'a' + 1][x - 'a' + 1] = true;
        }
}

void solve()
{
    for (int i = 1; i <= 26; ++ i)
        dp[i][1] = 1;
    for (int i = 2; i <= n; ++ i)
        {
         for (int j = 1; j <= 26; ++ j)
            for (int k = 1; k <= 26; ++ k)
                if (!A[j][k])
                    dp[j][i] = (dp[j][i] + dp[k][i - 1]) % MOD;
        }
}

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

int main()
{
    read();
    fin.close();
    solve();
    print();
    fout.close();
    return 0;
}