Cod sursa(job #828414)

Utilizator mirceadinoMircea Popoveniuc mirceadino Data 3 decembrie 2012 19:02:03
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<cstdio>
#define MOD(x) (x>=104659)?x-=104659:x=x
bool S[27][27];
long long M[1005][27],sol;
int i,j,n,m,k;
char a,b;
int main()
{
    freopen("nrcuv.in","r",stdin);
    freopen("nrcuv.out","w",stdout);
    scanf("%d %d\n",&n,&m);
    for(i=1;i<=m;i++)
    {
        scanf("%c %c\n",&a,&b);
        a=a-'a'+1;
        b=b-'a'+1;
        S[a][b]=S[b][a]=1;
    }
    for(i=1;i<=26;i++) M[1][i]=1;
    if(n==1) sol=26;
    for(i=2;i<=n;i++)
    {
        for(j=1;j<=26;j++)
        {
            for(k=1;k<=26;k++)
            {
                if(S[j][k]+S[k][j]==0) M[i][j]+=M[i-1][k];
                MOD(M[i][j]);
            }
            if(i==n) sol+=M[i][j];
            MOD(sol);
        }
    }
    printf("%lld\n",sol);
    return 0;
}