We know that finding the maximum independent set of an arbitrary graph is an NP-complete problem. Currently, there is no known exact polynomial-time algorithm, but there are many approximation algorithms with polynomial complexity.
For example, an algorithm often used by Little C is:
- For an undirected graph with $n$ vertices, first choose a random permutation $p[1\ldots n]$ of $1\ldots n$ with equal probability.
- Maintain an answer set $S$, which is initially empty. Then, in the order $i=1\ldots n$, check if $\{p[i]\}\cup S$ is an independent set. If it is, set $S=\{p[i]\}\cup S$.
- Finally, obtain an independent set $S$ as the answer.
Little C now wants to know the probability that this algorithm finds the maximum independent set for a given graph. Output the answer modulo $998244353$.
Input
The first line contains two non-negative integers $n$ and $m$, representing the number of vertices and edges in the given graph.
The next $m$ lines each contain two positive integers $(u,v)$ ($u\neq v$), describing an undirected edge in the graph.
Output
Output the probability, with the answer modulo $998244353$.
Examples
Input 1
3 2 1 2 2 3
Output 1
665496236
Note 1
665496236
Subtasks
For $10\%$ of the data, $1\leq n\leq 9$.
For $30\%$ of the data, $1\leq n\leq 13$.
For $50\%$ of the data, $1\leq n\leq 17$.
Another $10\%$ of the data satisfies the condition that the given graph is a chain.
Another $10\%$ of the data satisfies the condition that the given graph is a tree.
For $100\%$ of the data, $1\leq n\leq 20, 0\leq m\leq \frac{n\times (n-1)}{2}$. It is guaranteed that the given graph has no multiple edges or self-loops.