T713146 「奶龙」对话
题目背景
```cpp
#ifdef yyy_is_looking
#define 傻福 奶龙
#endif
```
一天,「奶龙」在群里看到了如下对话:

「奶龙」觉得很有趣,于是开始思考,怎样才能让图中看似位于众矢之的的「刘🍮」不是傻福。
「奶龙」认为,一个傻福说的话不值得相信。因此,只要图中的人都是傻福就能达成自己的心愿。
但是,这样的对话太有趣的,让「奶龙」难以忘怀。它又编写了一百万条这样的对话。它想知道,有多少种给人物赋值的方法能使得「刘🍮」不是傻福。
题目描述
对话中共有 $n$ 个人,其中「刘🍮」为第 $1$ 个人,他们参与了 $m$ 条对话。每一条对话有一个说话人,内容形如以下两种格式之一:
- 我是【】,我是傻福。
- 我是【】,我不是傻福。
若在同一个人所说的话中【】不唯一,那么这个人是傻福。
若说话人不是傻福,则满足【】是傻福 / 【】不是傻福。否则,**忽略这句话**。
对于一组对话,若一种把每个人赋值成傻福 / 不是傻福的方案满足了全部的对话且在这个赋值方案中「刘🍮」不是傻福,则称之为一种合法的赋值方案。
现在给定 $m$ 条对话,给定这 $m$ 条对话的说话人和【】,但是“是傻福”和“不是傻福”是**独立均匀随机**的。
现在,「奶龙」一眼秒了这个问题。为了向「奶龙」证明你不是傻福,你需要回答合法的赋值方案数的期望是多少?答案对 $998244353$ 取模。
注:$998244353$ 不是「奶龙」的 QQ 号。
输入格式
第一行两个正整数 $n$ 和 $m$,表示人数和对话数。
接下来 $n$ 行,每行 $2$ 个正整数。第 $i$ 行的两个正整数 $a_i$ 和 $b_i$ 分别表示第 $i$ 行对话的说话人和【】。
输出格式
一个正整数,表示答案。
说明/提示
**【样例解释】**
当对话形如:“「刘🍮」:「刘🍮」是傻福”,则没有合法方案。
当对话形如:“「刘🍮」:「刘🍮」不是傻福”则唯一的合法方案为:「刘🍮」不是傻福。
所以期望是 $\dfrac{1}{2}=499122177$。
**【数据范围】**
对于所有数据,满足:
- $1 \le n,m \le 10^6$。
- $1 \le a_i,b_i \le n$。
对于 $10\%$ 的数据,满足 $n,m \le 10$。
对于 $30\%$ 的数据,满足 $n,m \le 20$。
对于 $60\%$ 的数据,满足 $n,m \le 10^3$。
对于 $100\%$ 的数据,满足 $n,m \le 10^6$。