1 #include<iostream>
2 #include<cstdio>
3 #include<vector>
4 #include<cstring>
5 #define ls (x<<1)
6 #define rs (x<<1|1)
7 using namespace std;
8 const int N=1e5+5;
9 int sum[N<<2],tag[N<<2];
10 int n,m,t;
11 void update(int x){sum[x]=sum[ls]|sum[rs];}
12 void down(int l,int r,int x)
13 {
14 if(tag[x])
15 {
16 tag[ls]=tag[rs]=tag[x];
17 sum[ls]=1<<tag[x];
18 sum[rs]=1<<tag[x];
19 tag[x]=0;
20 }
21 }
22 void build(int l,int r,int x)
23 {
24 if(l==r)
25 {
26 sum[x]=2;
27 return;
28 }
29 int mid=(l+r)>>1;
30 build(l,mid,ls);
31 build(mid+1,r,rs);
32 update(x);
33 }
34 void modify(int A,int B,int l,int r,int v,int x)
35 {
36 if(A<=l&&B>=r)
37 {
38 tag[x]=v;
39 sum[x]=1<<v;
40 return;
41 }
42 down(l,r,x);
43 int mid=(l+r)>>1;
44 if(A<=mid)modify(A,B,l,mid,v,ls);
45 if(B>mid)modify(A,B,mid+1,r,v,rs);
46 update(x);
47 }
48 int query(int A,int B,int l,int r,int x)
49 {
50 if(A<=l&&B>=r)return sum[x];
51 down(l,r,x);
52 int mid=(l+r)>>1,ans=0;
53 if(A<=mid)ans|=query(A,B,l,mid,ls);
54 if(B>mid)ans|=query(A,B,mid+1,r,rs);
55 return ans;
56 }
57
58 int main()
59 {
60 scanf("%d%d%d",&n,&t,&m);
61 build(1,n,1);
62 char op[2];
63 for(int i=1;i<=m;i++)
64 {
65
66 scanf("%s",op);
67 if(op[0]=='C')
68 {
69 int l,r,v;
70 scanf("%d%d%d",&l,&r,&v);
71 if(l>r)swap(l,r);
72 modify(l,r,1,n,v,1);
73 }
74 else
75 {
76 int l,r;
77 scanf("%d%d",&l,&r);
78 if(l>r)swap(l,r);
79 int ans=query(l,r,1,n,1),cnt=0;
80 for(int i=31;i>=0;i--)if(ans>>i&1)cnt++;
81 printf("%d\n",cnt);
82 }
83 }
84 return 0;
85 }