Pagini recente » Cod sursa (job #2225106) | Monitorul de evaluare | Cod sursa (job #1199368) | Cod sursa (job #2806463) | Cod sursa (job #277097)
Cod sursa(job #277097)
#include <cstdio>
#include <cstring>
using namespace std;
long long a[27][27],w[27][27],n,m;
void copiere(long long a[27][27],long long w[27][27])
{
for (long long i=1; i<=26; i++)
for (long long j=1; j<=26; j++)
w[i][j]=a[i][j];
}
void inmultire(long long a[27][27], long long b[27][27], long long c[27][27])
{
long long d[27][27];
for (long long i=1; i<=26; i++)
for (long long j=1; j<=26; j++)
{
d[i][j]=0;
for (long long k=1; k<=26; k++)
d[i][j]+=a[i][k]*b[k][j];
d[i][j]%=104659;
}
copiere(d,w);
}
void inm_log(long long i)
{
if (i==1)
copiere(a,w);
else
if (i%2==0)
{
inm_log(i/2);
inmultire(w,w,w);
}
else
{
inm_log(i-1);
inmultire(a,w,w);
}
}
void citire()
{
char *x,*y,s[20];
for (long long i=1; i<=26; i++)
for (long long j=1; j<=26; j++)
a[i][j]=1;
freopen("nrcuv.in","r",stdin);
scanf("%lld %lld\n", &n, &m);
for (long long i=0; i<m; i++)
{
//scanf("%c %c\n", &x, &y);
fgets(s,20,stdin);
x=strtok(s," ,\n");
y=strtok(NULL,", \n");
a[x[0]-'a'+1][y[0]-'a'+1]=a[y[0]-'a'+1][x[0]-'a'+1]=0;
}
}
int main()
{
freopen("nrcuv.out","w",stdout);
citire();
if (n!=1)
inm_log(n-1);
long long s=0;
for (long long i=1; i<=26; i++)
for (long long j=1; j<=26; j++)
s+=w[i][j],s%=104659;
printf("%lld\n",s%104659);
return 0;
}