#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
inline int read()
{
int x = 0; int v = 1, c;
while(c = getchar(), c < '0' || c > '9') if(c == '-') v = -1;
for(; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - '0';
return x * v;
}
const int maxn = 100005;
int n, tot, q;
int col[maxn << 2], set[maxn << 2];
inline int calc(int x)
{
int res = 0;
while(x) {
x -= x & -x;
res++;
}
return res;
}
#define lc o << 1
#define rc lc | 1
#define Lc lc, L, M
#define Rc rc, M + 1, R
inline void pushdown(int o)
{
if(set[o]) {
set[lc] = set[rc] = col[lc] = col[rc] = set[o]; set[o] = 0;
}
}
inline void maintain(int o)
{
col[o] = col[lc] | col[rc];
}
void color(int o, int L, int R, int ql, int qr, int c)
{
if(L == ql && qr == R) {
set[o] = col[o] = c;
} else {
pushdown(o);
int M = (L + R) >> 1;
if(qr <= M) {
color(Lc, ql, qr, c);
} else if(M < ql) {
color(Rc, ql, qr, c);
} else {
color(Lc, ql, M, c);
color(Rc, M + 1, qr, c);
}
maintain(o);
}
}
int query(int o, int L, int R, int ql, int qr)
{
if(L == ql && qr == R) {
return col[o];
} else {
pushdown(o);
int M = (L + R) >> 1;
if(qr <= M) {
return query(Lc, ql, qr);
} else if(M < ql) {
return query(Rc, ql, qr);
} else {
return query(Lc, ql, M) | query(Rc, M + 1, qr);
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
register int a, b, c, ans;
n = read(), tot = read(), q = read();
memset(set, 0, sizeof(set)); set[1] = col[1] = 1;
while(q--) {
static char op[3];
scanf("%s", op);
a = read(), b = read();
if(a > b) swap(a, b);
if(op[0] == 'C') {
c = read();
color(1, 1, n, a, b, 1 << c - 1);
} else {
ans = query(1, 1, n, a, b);
printf("%d\n", calc(ans));
}
}
#ifndef ONLINE_JUDGE
fclose(stdin), fclose(stdout);
#endif
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGFsZ29yaXRobT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmlubGluZSBpbnQgcmVhZCgpCnsKCWludCB4ID0gMDsgaW50IHYgPSAxLCBjOwoJd2hpbGUoYyA9IGdldGNoYXIoKSwgYyA8ICcwJyB8fCBjID4gJzknKSBpZihjID09ICctJykgdiA9IC0xOwoJZm9yKDsgYyA+PSAnMCcgJiYgYyA8PSAnOSc7IGMgPSBnZXRjaGFyKCkpIHggPSB4ICogMTAgKyBjIC0gJzAnOwoJcmV0dXJuIHggKiB2Owp9Cgpjb25zdCBpbnQgbWF4biA9IDEwMDAwNTsKCmludCBuLCB0b3QsIHE7CmludCBjb2xbbWF4biA8PCAyXSwgc2V0W21heG4gPDwgMl07CgppbmxpbmUgaW50IGNhbGMoaW50IHgpCnsKCWludCByZXMgPSAwOwoJd2hpbGUoeCkgewoJCXggLT0geCAmIC14OwoJCXJlcysrOwoJfQoJcmV0dXJuIHJlczsKfQoKI2RlZmluZSBsYyBvIDw8IDEKI2RlZmluZSByYyBsYyB8IDEKI2RlZmluZSBMYyBsYywgTCwgTQojZGVmaW5lIFJjIHJjLCBNICsgMSwgUgoKaW5saW5lIHZvaWQgcHVzaGRvd24oaW50IG8pCnsKCWlmKHNldFtvXSkgewoJCXNldFtsY10gPSBzZXRbcmNdID0gY29sW2xjXSA9IGNvbFtyY10gPSBzZXRbb107IHNldFtvXSA9IDA7Cgl9Cn0KCmlubGluZSB2b2lkIG1haW50YWluKGludCBvKQp7Cgljb2xbb10gPSBjb2xbbGNdIHwgY29sW3JjXTsKfQoKdm9pZCBjb2xvcihpbnQgbywgaW50IEwsIGludCBSLCBpbnQgcWwsIGludCBxciwgaW50IGMpCnsKCWlmKEwgPT0gcWwgJiYgcXIgPT0gUikgewoJCXNldFtvXSA9IGNvbFtvXSA9IGM7Cgl9IGVsc2UgewoJCXB1c2hkb3duKG8pOwoJCWludCBNID0gKEwgKyBSKSA+PiAxOwoJCWlmKHFyIDw9IE0pIHsKCQkJY29sb3IoTGMsIHFsLCBxciwgYyk7CgkJfSBlbHNlIGlmKE0gPCBxbCkgewoJCQljb2xvcihSYywgcWwsIHFyLCBjKTsKCQl9IGVsc2UgewoJCQljb2xvcihMYywgcWwsIE0sIGMpOwoJCQljb2xvcihSYywgTSArIDEsIHFyLCBjKTsKCQl9CgkJbWFpbnRhaW4obyk7Cgl9Cn0KCmludCBxdWVyeShpbnQgbywgaW50IEwsIGludCBSLCBpbnQgcWwsIGludCBxcikKewoJaWYoTCA9PSBxbCAmJiBxciA9PSBSKSB7CgkJcmV0dXJuIGNvbFtvXTsKCX0gZWxzZSB7CgkJcHVzaGRvd24obyk7CgkJaW50IE0gPSAoTCArIFIpID4+IDE7CgkJaWYocXIgPD0gTSkgewoJCQlyZXR1cm4gcXVlcnkoTGMsIHFsLCBxcik7CgkJfSBlbHNlIGlmKE0gPCBxbCkgewoJCQlyZXR1cm4gcXVlcnkoUmMsIHFsLCBxcik7CgkJfSBlbHNlIHsKCQkJcmV0dXJuIHF1ZXJ5KExjLCBxbCwgTSkgfCBxdWVyeShSYywgTSArIDEsIHFyKTsKCQl9Cgl9Cgp9CgppbnQgbWFpbigpCnsKI2lmbmRlZiBPTkxJTkVfSlVER0UKCWZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOwoJZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KTsKI2VuZGlmCgkKCXJlZ2lzdGVyIGludCBhLCBiLCBjLCBhbnM7CgluID0gcmVhZCgpLCB0b3QgPSByZWFkKCksIHEgPSByZWFkKCk7CgltZW1zZXQoc2V0LCAwLCBzaXplb2Yoc2V0KSk7IHNldFsxXSA9IGNvbFsxXSA9IDE7Cgl3aGlsZShxLS0pIHsKCQlzdGF0aWMgY2hhciBvcFszXTsKCQlzY2FuZigiJXMiLCBvcCk7CgkJYSA9IHJlYWQoKSwgYiA9IHJlYWQoKTsKCQlpZihhID4gYikgc3dhcChhLCBiKTsKCQlpZihvcFswXSA9PSAnQycpIHsKCQkJYyA9IHJlYWQoKTsKCQkJY29sb3IoMSwgMSwgbiwgYSwgYiwgMSA8PCBjIC0gMSk7CgkJfSBlbHNlIHsKCQkJYW5zID0gcXVlcnkoMSwgMSwgbiwgYSwgYik7CgkJCXByaW50ZigiJWRcbiIsIGNhbGMoYW5zKSk7CgkJfQoJfQoJCiNpZm5kZWYgT05MSU5FX0pVREdFCglmY2xvc2Uoc3RkaW4pLCBmY2xvc2Uoc3Rkb3V0KTsKI2VuZGlmCglyZXR1cm4gMDsKfQo=