小Z的神奇数列

题目背景

小Z最近在研究数列,他需要知道在他所研究的数列中,最大的数是多少(Max),最小的数是多少(Min),最大的数的最小的数次幂是多少(Max^Min),所有数的乘积是多少。要知道,这样的问题是肯定难不倒小Z的。但是,最近小Z突发奇想,想要研究下这个数列的更深层的性质,所以他决定不断的从这个数列中删去一些数,每次删除后都研究下当前数列。由于数列项数很大,这给小Z带来了很大的麻烦,于是小Z请你帮他写一个程序,来完成下列操作。

题目描述

你需要维护一个可重集,支持五种操作: - `D x` 表示删除 $x$,保证 $x$ 一定存在。若有多个只用删除一个。 - `B` 询问集合中最大值。 - `S` 询问集合中最小值。 - `M` 设集合中最大值为 $a$,最小值为 $b$,询问 $a^b \bmod 317847191$。 - `T` 询问数列中所有数的乘积,对 $317847191$ 取模。 对于所有询问保证集合非空。

输入输出格式

输入格式


第一行两个正整数 $n,m$,表示初始集合大小和操作数。 第二行 $n$ 个正整数 $a_i$,表示初始集合。 接下来 $m$ 行,每行表示一个操作。

输出格式


对于每个询问,输出一行一个整数表示答案。

输入输出样例

输入样例 #1

3 6
2 6 9
M
D 9
B
S
M
T

输出样例 #1

81
6
2
36
12

说明

【数据规模】 对于部分数据,$1 \le n \le 1000$,$1\le m \le 100$,$1\le a_i \le 400$; 对于 $100\%$ 的数据,$1\le n,m \le 10^6$,$1\le a_i \le 10^8$。