题目描述
有N个人,编号为1、2、…、N,在一家银行前排队。
将发生Q个事件。以下三种事件可能发生。
1
:出纳员叫号尚未被叫的编号最小的人。
2 x
:编号为x的人第一次来到出纳员处。(这里,人x已经被出纳员叫过至少一次。)
3
:出纳员再次叫号已经被叫过但还没来的编号最小的人。
输出出纳员在第三种事件中叫号的人的编号。
约束条件
- 1≤N≤5×105
- 2≤Q≤5×105
- 当所有人至少被叫过一次时,不会发生第一种事件。
- 对于每个第二种事件,编号为x的人至少已经被出纳员叫过一次。
- 对于每个第二种事件,编号为x的人不会再次去找出纳员。
- 当所有已经被叫的人都已经到过出纳员时,不会发生第三种事件。
- 至少会有一个第三种事件发生。
- 输入中的所有值都是整数。
输入
从标准输入读入数据,输入格式如下,其中eventi表示第i个事件:
N Q
event1
event2
⋮
eventQ
每个事件的描述符以以下格式之一给出:
1
```2 $x$
```plain
3
输出
输出X行,其中X是第三种事件的事件数量。
第i行应包含第i个第三种事件中被叫号的人的编号。
示例输入1
4 10
1
1
3
2 1
1
2 3
3
1
2 2
3
示例输出1
1
2
4
对于每个i=1,2,…,Q,以下是在第i个事件之前已经被叫过但还没来的人的集合。
- i=1:{}
- i=2:{1}
- i=3:{1,2}
- i=4:{1,2}
- i=5:{2}
- i=6:{2,3}
- i=7:{2}
- i=8:{2}
- i=9:{2,4}
- i=10:{4}
对于i=3,7,10的事件是第三种事件,因此您应该打印这些事件的集合中编号最小的人:1,2,4。