#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
****************************************************************/