Cod sursa(job #658466)

Utilizator vlad2901Vlad Berindei vlad2901 Data 8 ianuarie 2012 21:29:59
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <cstdio>
#include <iostream>


#define NMAX 1001
#define MOD 104659

using namespace std;

int l[26][26];
int a[NMAX][26]; //cate cuvinte de lungime i se pot forma care au pe ultima pozitie j

int N, M;

int main()
{

    int i,j,k,sol;
    char la, lb;

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

    scanf("%d %d", &N, &M);

    for(i=0;i<M;++i)
    {
        cin.get();
        scanf("%c %c", &la, &lb);

        l[la-'a'][lb-'a'] = 1;
        l[lb-'a'][la-'a'] = 1;

    }

    for(i=0;i<26;++i)
    {
        a[1][i] = 1;
    }

    for(i=2;i<=N;++i)
    {
        for(j=0;j<26;++j)
        {
            for(k=0;k<26;++k)
            {
                if(l[j][k] == 0)
                {
                    a[i][j] += a[i-1][k];
                    if(a[i][j] > MOD)
                    {
                        a[i][j] %= MOD;
                    }
                }
            }
        }
    }

    sol = 0;

    for(i=0;i<26;++i)
    {
        sol += a[N][i];
        if(sol > MOD)
        {
            sol %= MOD;
        }
    }

    printf("%d", sol);

    return 0;
}