Cod sursa(job #998385)

Utilizator poptibiPop Tiberiu poptibi Data 16 septembrie 2013 21:14:25
Problema Lista lui Andrei Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <cstdio>
using namespace std;

const int MOD = 104659, NMAX = 1005;

int Out[30][30], DP[NMAX][30], N, M;
char A, B;

int main()
{
    freopen("nrcuv.in", "r", stdin);
    freopen("nrcuv.out", "w", stdout);

    scanf("%i %i\n", &N, &M);
    for(int i = 1; i <= M; ++ i)
    {
        scanf("%c %c\n", &A, &B);
        Out[A - 'a'][B - 'a'] = Out[B - 'a'][A - 'a'] = 1;
    }

    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(!Out[k][j])
                    DP[i][j] = (DP[i][j] + DP[i - 1][k]) % MOD;

    int Ans = 0;
    for(int i = 0; i < 26; ++ i) Ans += DP[N][i];

    printf("%i\n", Ans);

    return 0;
}