Pagini recente » Cod sursa (job #424875) | Cod sursa (job #1077972) | Cod sursa (job #2211956) | Cod sursa (job #2223671) | Cod sursa (job #277053)
Cod sursa(job #277053)
#include <cstdio>
using namespace std;
int a[27][27],w[27][27],n,m;
void copiere(int a[27][27],int w[27][27])
{
for (int i=1; i<=26; i++)
for (int j=1; j<=26; j++)
w[i][j]=a[i][j];
}
void inmultire(int a[27][27], int b[27][27], int c[27][27])
{
int d[27][27];
for (int i=1; i<=26; i++)
for (int j=1; j<=26; j++)
{
d[i][j]=0;
for (int k=1; k<=26; k++)
d[i][j]+=a[i][k]*b[k][j];
}
copiere(d,w);
}
void inm_log(int 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;
for (int i=1; i<=26; i++)
for (int j=1; j<=26; j++)
a[i][j]=1;
freopen("nrcuv.in","r",stdin);
scanf("%d %d\n", &n, &m);
for (int i=0; i<m; i++)
{
scanf("%c %c\n", &x, &y);
a[x-'a'+1][y-'a'+1]=a[y-'a'+1][x-'a'+1]=0;
}
}
int main()
{
freopen("nrcuv.out","w",stdout);
citire();
inm_log(n-1,w);
long long s=0;
for (int i=1; i<=26; i++)
for (int j=1; j<=26; j++)
s+=w[i][j];
printf("%lld\n",s);
return 0;
}