水题,一开始模板手写错了,RE两发
#include <cstdio>
#include <cstring>
#include <cmath>
#include <ctime>
#include <cstdlib>
#include <queue>
#include <stack>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
#define N 106
const int inf=0x3f3f3f3f;
struct ma
{
ll v[N][N];
ma()
{
memset(v,0,sizeof(v));
}
};
ma e,ans;
int n,m,k;
ma muli(ma p1,ma p2)
{
ma t;
for(int i=0; i<=n; i++)
for(int j=0; j<=n; j++)
if(p1.v[i][j])
for(int k=0; k<=n; k++)
t.v[i][k]+=(p1.v[i][j]*p2.v[j][k]);
return t;
}
ma mul(ma p,int k)
{
ma t;
for(int i=0; i<=n; i++)
{
t.v[i][i]=1;
}
while(k)
{
if(k&1)
t=muli(t,p);
k>>=1;
p=muli(p,p);
}
return t;
}
void init()
{
int x,y,t;
char w[2];
memset(e.v,0,sizeof(e.v));
for(int i=0; i<=n; i++)
e.v[i][i]=1;
while(k--)
{
scanf("%s",w);
if(w[0]=='g')
{
scanf("%d",&x);
x--;
e.v[n][x]++;
}
else if(w[0]=='s')
{
scanf("%d%d",&x,&y);
x--;
y--;
if(x!=y)
{
for(int i=0; i<=n; i++)
swap(e.v[i][y],e.v[i][x]);
}
}
else
{
scanf("%d",&x);
x--;
for(int i=0; i<=n; i++)
{
e.v[i][x]=0;
}
}
}
}
int main()
{
while(~scanf("%d%d%d",&n,&m,&k))
{
if(n==0&&m==0&&k==0)
break;
init();
ans=mul(e,m);
for(int i=0; i<n-1; i++)
printf("%lld ",ans.v[n][i]);
printf("%lld\n",ans.v[n][n-1]);
}
return 0;
}