两位程序员 Vasya 和 Petya 正在合作一个非常重要的项目。他们还有一些任务需要完成,而截止日期正在临近!幸运的是,所有事情都已经讨论好了,任务已经分配给了 Vasya 和 Petya,并且每个任务所需的时间也已经计算出来。现在唯一剩下的事情就是决定他们完成这些任务的顺序。他们不喜欢同时做多个任务,因此决定各自为自己的任务安排一个顺序,然后按照该顺序逐个完成。
不幸的是,有一个小问题。有些任务是“开发任务”(developer tasks),有些是“测试任务”(tester tasks)。这意味着在某些任务中,他们需要为项目添加一些功能,而在另一些任务中,他们需要测试他们开发的应用程序。当然,每个开发任务(即使是分配给另一个人的)都必须在任何测试任务完成之前严格完成。请注意,一个人可以在开发任务全部完成之前开始进行测试任务:测试人员可以使用现有功能开始测试过程(但在所有计划的功能完成之前,无法完全完成对应用程序的测试)。
你是这个项目的项目经理,你的目标是监督他们,确保他们不浪费任何时间。这意味着,在其中一人完成某个任务后,他必须立即开始做分配给他的另一个任务(当然,除非他已经完成了他的所有任务)。此外,他们必须立即且同时开始工作。每位程序员可以自由选择分配给他的任务的任何顺序,但必须满足关于开发任务和测试任务的条件。
你想知道程序员安排自己任务的正确方式总共有多少种。由于这个数量可能非常大,请将其对 $998\,244\,353$ 取模后输出。两种方式被认为是不同的,当且仅当存在分配给同一个人的两个任务,在第一种顺序中第一个任务在第二个任务之前完成,而在第二种顺序中第二个任务在第一个任务之前完成。
输入格式
第一行包含两个整数 $n$ 和 $m$ ($1 \le n, m \le 10^5$),分别表示 Vasya 和 Petya 需要解决的任务数量。
接下来的 $n$ 行包含 Vasya 的任务描述。每行包含一个整数 $t_i$ ($1 \le t_i \le 10^9$) 和一个字母 $c_i$ ($c_i \in \{\text{T}, \text{D}\}$)。其中整数表示完成该任务所需的时间,如果该任务是开发任务,则字母为 D;如果该任务是测试任务,则字母为 T。
最后的 $m$ 行以相同的格式包含 Petya 的任务描述。
输出格式
输出一个整数,表示正确安排方式的数量对 $998\,244\,353$ 取模后的结果。
样例
输入样例 1
2 2 8 T 100 T 3 D 5 D
输出样例 1
2
输入样例 2
2 1 10 D 3 T 1 D
输出样例 2
1