2 #include <iostream>
3 #include <queue>
4 #include <set>
5 #include <cstring>
6 using namespace std;
7 #define lson l,m,rt<<1
8 #define rson m+1,r,rt<<1|1
9 const int maxn = 1001111;
10 set<int> ans;
11 int SIZE;
12 int sum[maxn<<2];
13 void PushDown(int rt){
14 if(sum[rt]){
15 sum[rt<<1] = sum[rt];
16 sum[rt<<1|1] = sum[rt];
17 sum[rt] = 0;
18 }
19 }
20 void build(int l,int r,int rt){
21 if(l == r){
22 sum[rt] = 2;return;
23 }
24 int m = (l + r) >>1;
25 build(lson);
26 build(rson);
27 return ;
28 }
29 void update(int L,int R,int c,int l,int r,int rt){
30 if(L <= l&&r <= R){
31 sum[rt] = c;
32 return ;
33 }
34 int m = (l + r)>>1;
35 PushDown(rt);
36 if(L <= m) update(L,R,c,lson);
37
38 if(m < R) update(L,R,c,rson);
39 return ;
40 }
41 void query(int L,int R,int l,int r,int rt){
42 //if(rt > SIZE) return;
43 if(L <= l&&r <= R&&sum[rt]){
44 ans.insert(sum[rt]);
45 return ;
46 }
47 PushDown(rt);
48 int m = (l + r)>>1;
49 if(L <= m) query( L, R,lson);
50 if(m < R) query( L, R,rson);
51 return;
52 }
53 void print(){
54 set<int>::iterator it;
55 it = ans.begin();
56 cout<<*it;
57 ans.erase(it);
58 for(it = ans.begin();it != ans.end();++it)
59 printf(" %d",*it);
60 puts("");
61 }
62 void print_debug(){ //此为调试代码,请忽略==|||
63 cout<<"sum: "<<endl;
64 for(int i = 1;i <= 20;i++)
65 cout<<sum[i]<<" ";
66 puts("");
67 }
68 int main(){
69 int N,Q,a,b,c;
70 char ope[3];
71 while(~scanf("%d%d",&N,&Q)&&(N+Q)){
72 SIZE = (N+1)*N/2;
73 memset(sum,0,sizeof(sum));
74 build(1,N,1);
75 while(Q--){
76 scanf("%s",ope);
77 if(ope[0] == ‘Q‘){
78 scanf("%d%d",&a,&b);
79 ans.clear();
80 query(a,b,1,N,1);
81 print();
82 }else{
83 scanf("%d%d%d",&a,&b,&c);
84 update(a,b,c,1,N,1);
85 //print_debug();
86 }
87 }
88 }
89 return 0;
90 }