#include <cstdio> #include <cstring> #include <cmath> #include <vector> #include <algorithm> #include <iostream> using namespace std; #define LL __int64 LL n; struct matrix{ LL f[101][101]; }; matrix mul(matrix a,matrix b) { LL i,j,k; matrix c; memset(c.f,0,sizeof(c.f)); for(k=0;k<n;k++) { for(i=0;i<n;i++) { if(!a.f[i][k])continue; for(j=0;j<n;j++) { if(!b.f[k][j])continue; c.f[i][j]+=a.f[i][k]*b.f[k][j]; } } } return c; } matrix pow_mod(matrix a,LL b) { matrix s; memset(s.f,0,sizeof(s.f)); for(LL i=0;i<n;i++) s.f[i][i]=1; while(b) { if(b&1) s=mul(s,a); a=mul(a,a); b=b>>1; } return s; } int main() { LL m,k; while(cin>>n>>m>>k) { if(n==0&&m==0&&k==0) break; n++; LL i,j,x,y,t; char s[2]; matrix e; memset(e.f,0,sizeof(e.f)); for(i=0;i<n;i++) e.f[i][i]=1; for(i=0;i<k;i++) { cin>>s; if(s[0]=='g') { cin>>x; e.f[n-1][x-1]++; } else if(s[0]=='e') { cin>>x; for(j=0;j<n;j++) e.f[j][x-1]=0; } else { cin>>x>>y; for(j=0;j<n;j++) { t=e.f[j][x-1]; e.f[j][x-1]=e.f[j][y-1]; e.f[j][y-1]=t; } } } /*for(i=0;i<n;i++) { for(j=0;j<n;j++) cout<<e.f[i][j]<<" "; cout<<endl; }*/ e=pow_mod(e,m); LL ans[101]; for(i=0;i<n-1;i++) ans[i]=e.f[n-1][i]; cout<<ans[0]; for(i=1;i<n-1;i++) cout<<" "<<ans[i]; cout<<endl; } return 0; } /* 矩阵 样例说明:初始状态|0 0 0 1|,其中1表示得到一颗花生 |1 0 0 0| |1 0 0 0| |1 0 0 0| |0 1 0 0| |0 1 0 0| |0 0 0 0| |0 1 0 0| |0 1 0 0| |0 1 0 0| |1 0 0 0| |1 0 0 0| |1 0 0 0| |0 0 1 0|->(g 1)|0 0 1 0|->(g 2,g 2)|0 0 1 0|->(s 1 2)|0 0 1 0|->(g 3)|0 0 1 0|->(e 2)|0 0 1 0| |0 0 0 1| |1 0 0 1| |1 2 0 1| |2 1 0 1| |2 1 1 1| |2 1 1 1| g i=f[n-1][i-1]++; e i=清空第i-1列 s i j=交换列i-1和列j-1 */