#include<bits/stdc++.h>
using namespace std;
struct Node{
int l,r,mx,lazytag;
}tree[28][400010];
void pushup(int p,int num){
tree[num][p].mx=tree[num][p*2].mx+tree[num][p*2+1].mx;
}
void build(int p,int l,int r,int num){
tree[num][p].l=l,tree[num][p].r=r;
if(l==r){
if(num==1)tree[num][p].mx=11;
else tree[num][p].mx=0;
return;
}
int mid=(l+r)/2;
build(p*2,l,mid,num);
build(p*2+1,mid+1,r,num);
pushup(p,num);
}
void pushdown(int p,int num){
int mid=(tree[num][p].l+tree[num][p].r)/2;
tree[num][p*2].mx=tree[num][p].lazytag*(mid-tree[num][p].l+1);
tree[num][p*2+1].mx=tree[num][p].lazytag*(tree[num][p].r-mid);
tree[num][p*2].lazytag=tree[num][p].lazytag;
tree[num][p*2+1].lazytag=tree[num][p].lazytag;
tree[num][p].lazytag=0;
}
int query(int p,int L,int R,int num){
if(tree[num][p].l>=L&&tree[num][p].r<=R){
return tree[num][p].mx;
}
pushdown(p,num);
int mid=(tree[num][p].l+tree[num][p].r)/2;
int ans=0;
if(mid>=L){
ans+=query(p*2,L,R,num);
}
if(mid<R){
ans+=query(p*2+1,L,R,num);
}
return ans;
}
void modify(int p,int L,int R,int val,int num){
if(tree[num][p].l>=L&&tree[num][p].r<=R){
tree[num][p].mx=val*(tree[num][p].r-tree[num][p].l+1);
tree[num][p].lazytag=val;
return;
}
pushdown(p,num);
int mid=(tree[num][p].l+tree[num][p].r)/2;
if(mid>=L){
modify(p*2,L,R,val,num);
}
if(mid<R){
modify(p*2+1,L,R,val,num);
}
pushup(p,num);
}
int main(){
int l,t,o;
cin>>l>>t>>o;
for(int i=1;i<=t;i++){
build(1,1,l,i);
}
for(int i=1;i<=o;i++){
char op;
cin>>op;
if(op=='C'){
int x,y,z;
cin>>x>>y>>z;
if(x>y)swap(x,y);
for(int i=1;i<=t;i++){
if(i!=z){
modify(1,x,y,0,i);
}
else modify(1,x,y,11,i);
}
}
else{
int ans=0;
int x,y;
cin>>x>>y;
if(x>y)swap(x,y);
for(int i=1;i<=t;i++){
if(query(1,x,y,i))ans++;
}
cout<<ans<<endl;
}
}
return 0;
}