#include <iostream>
#include <cstdio>
#define N 502
#define M 300002
using namespace std;
char op[10];
int n,m,k,i,val[M],son[M][2],dis[M],fa[M],r[N];
int merge(int x,int y)
{
if(!x) return y;
if(!y) return x;
if(val[x]>val[y]) swap(x,y);
son[x][1]=merge(son[x][1],y);
if(dis[son[x][0]]<dis[son[x][1]]) swap(son[x][0],son[x][1]);
fa[son[x][0]]=fa[son[x][1]]=x;
dis[x]=dis[son[x][1]]+1;
return x;
}
void add(int x,int y,int z)
{
int f=fa[y],tmp=merge(son[y][0],son[y][1]);
if(r[x]==y) r[x]=tmp;
else if(son[f][0]==y) son[f][0]=tmp;
else son[f][1]=tmp;
fa[tmp]=f;
fa[y]=son[y][0]=son[y][1]=0;
val[y]+=z;
r[x]=merge(r[x],y);
}
int main()
{
scanf("%d %d %d",&n,&m,&k);
for(i=1;i<=k;i++){
int x,y,z;
scanf("%s",op);
if(op[0]=='A'){
scanf("%d %d %d",&x,&y,&z);
val[y]=z;
r[x]=merge(r[x],y);
}
else if(op[0]=='D'){
scanf("%d %d %d",&x,&y,&z);
add(x,y,-z);
}
else if(op[0]=='T'){
scanf("%d %d",&x,&y);
r[y]=merge(r[x],r[y]);
r[x]=0;
}
else if(op[0]=='M'){
scanf("%d",&x);
printf("%d\n",val[r[x]]);
}
else{
scanf("%d %d",&x,&y);
if((son[r[x]][0]&&val[r[x]]==val[son[r[x]][0]])||(son[r[x]][1]&&val[r[x]]==val[son[r[x]][1]])) puts("ERROR");
else add(x,r[x],y);
}
}
return 0;
}
/**************************************************************
Problem: 1759
User: admin
Language: C++
Result: Accepted
Time:5 ms
Memory:7940 kb
****************************************************************/