这是一个交互式问题。
你有 $n$ 个整数集合,集合编号从 $1$ 到 $n$。初始时,所有集合均为空。你的任务是执行 $q$ 次以下三种类型的查询:
- “$+ \ell \ r \ x$”:将 $x$ 添加到编号从 $\ell$ 到 $r$ 的所有集合中($1 \le \ell \le r \le n$)。
- “$- \ell \ r \ x$”:从编号从 $\ell$ 到 $r$ 的所有集合中移除 $x$($1 \le \ell \le r \le n$)。
- “$? \ k$”:输出编号为 $k$ 的集合的大小($1 \le k \le n$)。
集合的行为与普通集合一致:如果我们添加一个已经存在的元素,或者移除一个已经不存在的元素,则什么都不会发生。
输入格式
第一行包含两个整数 $n$ 和 $q$,分别表示集合的数量和查询的数量($1 \le n \le 10^9$;$0 \le q \le 10^5$)。接下来的 $q$ 行包含上述格式的查询(查询中 $1 \le x \le q$)。
输出格式
对于每种第三类查询,你的程序应在单独的一行中输出答案。保证此类查询最多有 $10\,000$ 次。输出每个答案后,请务必打印换行符并刷新输出缓冲区,否则结果将为 “Idleness Limit Exceeded”。刷新缓冲区的方法包括:在 C 或 C++ 中调用 fflush(stdout),在 Java 中调用 System.out.flush(),在 Pascal 中调用 flush(output),或在 Python 中调用 sys.stdout.flush()。
样例
样例输入 1
736 10 ? 1 + 1 5 1 + 2 600 2 ? 1 ? 2 + 1 6 2 ? 1 ? 2 - 1 6 2 ? 4
样例输出 1
0 1 2 2 2 1