#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; long long maxn=102; struct Matrix { long long mat[103][103]; }; Matrix mul(Matrix a,Matrix b) { Matrix ret; memset(ret.mat,0,sizeof(ret.mat)); for(int i=0;i<maxn;i++) for(int k=0;k<maxn;k++) { if(a.mat[i][k]!=0) for(int j=0;j<maxn;j++) { ret.mat[i][j]+=a.mat[i][k]*b.mat[k][j]; } } return ret; } Matrix pow_M(Matrix a,long long n) { Matrix ret; memset(ret.mat,0,sizeof(ret.mat)); for(int i=0;i<maxn;i++)ret.mat[i][i]=1; Matrix temp=a; while(n) { if(n&1)ret=mul(ret,temp); temp=mul(temp,temp); n>>=1; } return ret; } int main() { long long m; int n,k; Matrix a; while(~scanf("%d%lld%d",&n,&m,&k)) { memset(a.mat,0,sizeof(a.mat)); for(int i=0;i<maxn;i++) a.mat[i][i]=1; if(n==0 && m==0 && k==0)break; while(k--) { char s[5]; scanf("%s",&s); if(s[0]=='g') { int x; scanf("%d",&x); a.mat[x][n+1]++; } if(s[0]=='s') { int x,y; scanf("%d%d",&x,&y); for(int i=0;i<=n+1;i++) swap(a.mat[x][i],a.mat[y][i]); } if(s[0]=='e') { int x; scanf("%d",&x); for(int i=0;i<=n+1;i++)a.mat[x][i]=0; } } Matrix b; b=pow_M(a,m); for(int i=1;i<n;i++)printf("%lld ",b.mat[i][n+1]); printf("%lld\n",b.mat[n][n+1]); } return 0; }
|