Cod sursa(job #1555633)

Utilizator elevenstrArina Raileanu elevenstr Data 23 decembrie 2015 12:22:00
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <bits/stdc++.h>

using namespace std;
#define MOD 104659
ifstream in("nrcuv.in");
ofstream out("nrcuv.out");
/*
long long mat[27][27];//0-26
void mult(long long a[][27],long long b[][27])
{
    long long c[27][27];
    for(int i=0;i<26;i++)
        for(int j=0;j<26;j++)
    {
        c[i][j]=0;
        for(int k=0;k<26;k++)
            c[i][j]=(c[i][j]+(1LL*a[i][k]*b[k][j])%MOD)%MOD;
    }
     for(int i=0;i<26;i++)
        for(int j=0;j<26;j++)
            a[i][j]=c[i][j];
}

long long exp(long long a[][27],int powe)
{
    long long ans[27][27];
    while(powe)
    {
        if(powe&1)mult(ans,a);
        powe/=2;
        mult(a,a);
    }
}
int main()
{   long long n,m;
    in>>n>>m;
    for(int i=0;i<=25;i++)
    for(int j=0;j<=25;j++)
        mat[i][j]=1;
    while(m--)
    {
        char a,b;
        in>>a>>b;
        mat[a-'a'][b-'a']=mat[b-'a'][a-'a']=0;
    }
    exp(mat,n-1);
    int ans=0;
    for(int i=0;i<26;i++)
        ans=(ans+mat[25][i])%MOD;
        out<<ans;
    return 0;
}
*/
int X[27][27];
long long sol[1008][27];
int main()
{  int n,m;
    in>>n>>m;
     while(m--)
    {
        char a,b;
        in>>a>>b;
      X[a-'a'][b-'a']=X[b-'a'][a-'a']=1;
    }
    int p=0;
     for(int j=0;j<26;j++)
        sol[1][j]=1;
    for(int i=2;i<=n;i++)
        for(int j=0;j<26;j++)
            for(int k=0;k<26;k++)
        {
            if(!X[j][k])
            {
                sol[i][j]=(sol[i][j]+sol[i-1][k])%MOD;
            }
        }
    long long ans=0;
   for(int i=0;i<26;i++)
    ans=(ans+sol[n][i])%MOD;
   out<<ans;
}