#include<bits/stdc++.h>
using namespace std;
int yt=1;           //test variable
bool qf=false;      //fast io enabled/disabled

#define input       freopen("in.txt","r",stdin);
#define output      freopen("out.txt","w",stdout);
#define fast        ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);qf=true;

#define sc          scanf
#define pr          printf
#define whi         while
#define ll          long long
#define ull         unsigned long long
#define lld         I64d
#define mp          make_pair
#define ff          first
#define ss          second
#define vc          vector
#define pb          push_back
#define ite         iterator
#define str         string
#define bl          bool
#define tr          true
#define fl          false

#define endl        '\n'
#define ret         return
#define rsort       greater<int>()
#define nl          if(qf==tr) pr("\n");else cout<<"\n";
#define test        if(qf==tr) pr("TEST %d\n",yt++);else cout<<"TEST "<<yt++<<"\n";
#define gcd(a,b)    __gcd(a,b)
#define mod         1000000007

#define all(c)      c.begin(),c.end()
#define sz(c)       c.size()
#define clr(c)      c.clear()
#define fd(c,a)     c.find(a)
#define bg(c)       c.begin()
#define ed(c)       c.end()
#define ins(c,a)    c.insert(a)
#define rem(c,a)    c.erase(a)

#define si(n)       if(qf==fl) sc("%d",&n); else cin>>n;
#define sll(n)      if(qf==fl) sc("%lld",&n); else cin>>n;
#define pi(n)       if(qf==fl) pr("%d ",n); else cout<<n<<" ";
#define pll(n)      if(qf==fl) pr("%lld ",n); else cout<<n<<" ";

#define tc          int t;if(qf==fl) si(t) else cin>>t;whi(t--)
#define ct          continue;
#define debug       system("PAUSE");
int a[109][109];
pair <int,int> temp[109][109];
int main()
{
    int i,j,n,m,q,ch;
    sc("%d%d%d",&n,&m,&q);
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            temp[i][j].ff=i;
            temp[i][j].ss=j;
        }
    }
    int pos,t1,t2,r,c,val;
    whi(q--)
    {
        sc("%d",&ch);
        if(ch==1) //row shift
        {
            sc("%d",&pos);
            pos--;
            t1=temp[pos][0].ff;
            t2=temp[pos][0].ss;
            for(i=0;i<m-1;i++)
            {
                temp[pos][i].ff=temp[pos][i+1].ff;
                temp[pos][i].ss=temp[pos][i+1].ss;
            }
            temp[pos][m-1].ff=t1;
            temp[pos][m-1].ss=t2;
        }
        else if(ch==2) //column shift
        {
            sc("%d",&pos);
            pos--;
            t1=temp[0][pos].ff;
            t2=temp[0][pos].ss;
            for(i=0;i<n-1;i++)
            {
                temp[i][pos].ff=temp[i+1][pos].ff;
                temp[i][pos].ss=temp[i+1][pos].ss;
            }
            temp[n-1][pos].ff=t1;
            temp[n-1][pos].ss=t2;
        }
        else
        {
            sc("%d%d%d",&r,&c,&val);
            r--;
            c--;
            a[temp[r][c].ff][temp[r][c].ss]=val;
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++) pr("%d ",a[i][j]);
        nl
    }
    ret 0;
}
