Pagini recente » Cod sursa (job #353815) | Cod sursa (job #2160957) | Cod sursa (job #1323242) | Cod sursa (job #1641329) | Cod sursa (job #944639)
Cod sursa(job #944639)
#include <fstream>
using namespace std;
ifstream in ("nrcuv.in");
ofstream out ("nrcuv.out");
int v[1001][27],ap[27],K=0;
char c[27][27];
const int M=104659;
long long parcurge( long long sum)
{
long long sum2=0;
for(int i=0; i<26; i++)
{
v[K][i]=sum;
for(int j=0;j<ap[i];j++)
v[K][i]-=v[K-1][c[i][j]];
if(v[K][i]<0)
v[K][i]+=M;
sum2=(v[K][i]+sum2)%M;
}
return sum2;
}
int main()
{
int n,m,i,j;
bool bun;
char a,b;
in>>n>>m;
for(i=1; i<=m; i++)
{
in>>a>>b;
a=a-97;
b=b-97;
bun=1;
for(j=0; j<ap[a]; j++)
if(c[a][j]==b)
bun=0;
if(bun==1)
{
c[a][ap[a]]=b;
ap[a]++;
}
bun=1;
for(j=0; j<ap[b]; j++)
if(c[b][j]==a)
bun=0;
if(bun==1)
{
c[b][ap[b]]=a;
ap[b]++;
}
}
long long sum=0;
for(i=0; i<26; i++)
v[1][i]=1;
for(i=0; i<26; i++)
{
v[2][i]=26-ap[i];
sum=(v[2][i]+sum)%M;
}
K=2;
for(i=2; i<=n-1; i++)
{
sum=parcurge(sum%M);
K++;
}
out<<sum;
return 0;
}