#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=110;
char g[N][N];
bool st[N][N];
typedef pair<int,int> PII;
PII q[N*N];
int m,n,qq;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
void bfs(int sx,int sy,char c)
{
int hh=0,tt=0;
int udx=sy, lry=sx;//sx左右偏移,sy上下偏移。udx上下偏移即遍历行,lry左右偏移即遍历列
q[0]={udx,lry};
st[udx][lry]=true;
while(hh<=tt)
{
auto e=q[hh++];
int nx=e.first,ny=e.second;
for(int i=0;i<4;i++)
{
int x=nx+dx[i],y=ny+dy[i];
if(x>=0&&x<n&&y>=0&&y<m&&g[x][y]!='-'&&g[x][y]!='|'&&g[x][y]!='+'&&!st[x][y])
{
q[++tt]={x,y};
st[x][y]=true;
}
}
g[nx][ny]=c;
}
}
void paint(int x1,int y1,int x2,int y2)
{
if(x1==x2)//同x,竖着画
{
if(y1>y2)
{int tmp=y1;
y1=y2;
y2=tmp;
}
for(int i=y1;i<=y2;i++)
{
if(i>=0&&i<n)
{
if(g[i][x1]=='-'||g[i][x1]=='+')g[i][x1]='+';//特判'+'
else g[i][x1]='|';
}
}
}else//同y,横着画
{
if(x1>x2)
{int tmp=x1;
x1=x2;
x2=tmp;
}
// cout<<"sd "<<x1<<" : "<<x2<<endl;
for(int i=x1;i<=x2;i++)
{
//cout<<"get"<<endl;
if(i>=0&&i<m)
{
if(g[y1][i]=='|'||g[y1][i]=='+')g[y1][i]='+';//特判'+'
else g[y1][i]='-';
}
}
}
}
int main()
{
cin>>m>>n>>qq;
memset(g,'.',sizeof(g));
while(qq--)
{
int op;
cin>>op;
if(op==0)
{
int x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
// cout<<"x1: "<<x1<<" y1: "<<y1<<" x2: "<<x2<<" y2: "<<y2<<endl;
paint(x1,y1,x2,y2);
}
else
{
memset(st,false,sizeof(st));
int x,y;
char c;
cin>>x>>y>>c;
// cout<<x<<" "<<y<<endl;
bfs(x,y,c);
}
}
for(int i=n-1;i>=0;i--)
{
for(int j=0;j<m;j++)
{
cout<<g[i][j];
}
cout<<endl;
}
return 0;
}