编程题
### 问题描述
小蓝是一个魔术师,他正在蓝桥大剧院表演。
台上有一排 $n$ 个盒子,编号 $1 \sim n$。表演开始之前,助手会在每个盒子里放入一个小球,小球的颜色有三种,分别为红、黄、蓝。
小蓝有 $3$ 种魔术操作:
1. **颜色互换**,小蓝会选择一个区间 $[l,r]$ 和两种颜色 $a,b$,对于每一个盒子来说,如果它的编号在 $[l,r]$ 内,并且盒子内的球颜色为 $a$,那么盒子里球颜色变为 $b$,如果盒子里的球颜色为 $b$,那么盒子里球颜色变为 $a$。
2. **染色**,小蓝会选择一个区间 $[l,r]$ 和两种颜色 $a,b$,对于每一个盒子来说,如果它的编号在 $[l,r]$ 内,并且盒子内的球颜色为 $a$,那么盒子里球颜色变为 $b$。
3. **分裂**,小蓝会选择一个区间 $[l,r]$ 和一种颜色 $a$,对于每一个盒子来说,如果它的编号在 $[l,r]$ 内,并且盒子内的球颜色为 $a$,那么盒子里所有的球由一个分裂成两个。
**补充说明**:对于三种魔术,在区间内,如果不存在颜色 $a$ 的球,那么对于颜色 $a$ 的操作将不会发生;如果不存在颜色 $b$ 的球,那么同理;如果都不存在,那么什么都不会发生。
> 例如:对于颜色互换术而言,如果不存在颜色为 $a$ 的球,但是存在颜色为 $b$ 的球,那么颜色为 $b$ 的球将被变成 $a$,但是将没有颜色为 $a$ 的球变成 $b$。
小蓝会不断的重复上述三种操作。
你是小蓝的助手,每一次操作后,你都需要回答小蓝,每种颜色的球现在有多少个。答案可能很大,请对 $998244353$ 取模。
### 输入格式
第一行输入两个整数 $n,m$。
接下来一行,输入 $n$ 个整数 $c_1, c_2, c_3,...,c_n$,每个盒子里球的初始颜色,为了方便,我们用数字 $1,2,3$ 来表示颜色红、黄。蓝,下述操作同理。
接下来 $m$ 行,每行包含一个操作,先输入三个整数 $l,r,opt$, $l,r$ 代表操作区间为编号在 $[l,r]$ 中的盒子,$opt$ 代表操作种类,后续输入如下:
1. 如果 $opt = 1$,输入两个整数 $a,b$,代表进行**颜色互换术**,将区间内 $a,b$ 颜色互换,即颜色为 $a$ 的球变为颜色 $b$,颜色为 $b$ 的球变为颜色 $a$。
2. 如果 $opt = 2$,输入两个整数 $a,b$,代表进行**染色术**,将区间内 $a$ 颜色球变为颜色 $b$。
3. 如果 $opt = 3$,输入一个整数 $a$,代表进行**分裂术**,将区间内所有 $a$ 颜色的球由一个分裂成两个。
### 输出格式
输出 $m$ 行,每行三个整数,表示这次操作结束后,所有盒子中颜色分别为 $1,2,3$ 的球的数量,答案可能很大,请对 $998244353$ 取模。
### 样例输入
```bash
5 3
1 1 2 3 1
1 3 1 1 2
2 3 2 1 2
2 4 3 2
```
### 样例输出
```bash
2 2 1
1 3 1
1 5 1
```
### 说明
第一次操作后:$\lbrace 2_1,2_1,1_1,3_1,1_1 \rbrace$。值代表该盒子里球的颜色,角标代表该盒子的球数量。
第二次操作后:$\lbrace 2_1,2_1,2_1,3_1,1_1 \rbrace$。
第三次操作后:$\lbrace 2_1,2_2,2_2,3_1,1_1 \rbrace$。
输入输出数据量较大,请使用较快的输入输出方式。
### 评测数据范围
$1 \le n, m \le 10^5, 1 \le opt, c_i, a, b\le 3, 1\le l \le r \le n$。
保证 $a \neq b$。