Pagini recente » Cod sursa (job #2875161) | Cod sursa (job #1815362) | Cod sursa (job #1434348) | Cod sursa (job #2175997) | Cod sursa (job #66829)
Cod sursa(job #66829)
using namespace std;
#define MAX_N 1005
#define MAX_L 30
#define max(a,b) ((a)>(b)?(a):(b))
#include <stdio.h>
#include <fstream>
FILE *fin=fopen("nrcuv.in","r"),
*fout=fopen("nrcuv.out","w");
typedef struct
{
int n;
int x[100];
} bignum;
int i,j,n,m,k;
char c1,c2;
bignum v[MAX_N][MAX_L];
int o[MAX_L][MAX_L];
bignum sol;
void add(bignum &a, bignum b)
{
int i,t=0;
a.n=max(a.n,b.n);
for (i=1; i<=a.n; i++)
{ a.x[i]=(t+=a.x[i]+b.x[i])%10; t/=10; }
if (t>0) a.x[++a.n]=t;
}
int main()
{
fscanf(fin,"%d %d\n",&n,&m);
memset(o,0,sizeof(o));
memset(sol.x,0,sizeof(sol.x));
for (i=1; i<=m; i++) {
fscanf(fin,"%c %c\n",&c1,&c2);
o[c1-96][c2-96]=1;
}
for (j=1; j<=26; j++)
{v[1][j].n=1; v[1][j].x[1]=1; }
for (i=1; i<=n; i++)
for (j=1; j<=26; j++)
for (k=1; k<=26; k++)
if (o[j][k]==0 && o[k][j]==0) add(v[i][j],v[i-1][k]);
sol.n=0;
for (i=1; i<=26; i++)
add(sol,v[n][i]);
for (i=sol.n; i>=1; i--)
fprintf(fout,"%d",sol.x[i]);
fprintf(fout,"\n");
fclose(fin); fclose(fout);
return 0;
}