Pagini recente » Cod sursa (job #2503792) | Cod sursa (job #2148136) | Cod sursa (job #934680) | Cod sursa (job #1236490) | Cod sursa (job #286253)
Cod sursa(job #286253)
#include <fstream>
#define MAX 104659
#define Constanta 26
using namespace std;
ifstream fin ("nrcuv.in");
ofstream fout ("nrcuv.out");
long long mat[50][50];
long long sir[50];
long long rez[50][50];
long long n,nr;
void inmultire(long long mat[50][50],long long mat2[50][50])
{
long long rez[50][50];
memset(rez,0,sizeof(rez));
for (long long i=0;i<Constanta;i++)
for (long long j=0;j<Constanta;j++)
{
for (long long k=0;k<Constanta;k++)
rez[i][j]+=mat[i][k]*mat2[k][j];
}
for (long long i=0;i<Constanta;i++)
for (long long j=0;j<Constanta;j++)
mat[i][j]=rez[i][j]%MAX;
}
void mult(long long n)
{
if (n==1)
{
for (long long i=0;i<Constanta;i++)
for (long long j=0;j<Constanta;j++)
mat[i][j]=rez[i][j];
return ;
}
if (n%2==0)
{
mult(n>>1);
inmultire(mat,mat);
}
else
{
mult(n-1);
inmultire(mat,rez);
}
}
int main ()
{
char c1,c2;
fin>>n>>nr;
for (long long i=0;i<Constanta;i++)
for (long long j=0;j<Constanta;j++)
rez[i][j]=1;
while (nr)
{
fin>>c1>>c2;
rez[c1-'a'][c2-'a']=0;
rez[c2-'a'][c1-'a']=0;
nr--;
}
if (n>1)
{
mult(n-1);
long long S=0;
for (long long j=0;j<Constanta;j++)
for (long long i=0;i<Constanta;i++)
S+=mat[j][i];
fout<<S%MAX<<"\n";
}
else
fout<<26<<"\n";
return 0;
}