#include using namespace std; vector visitedNodes; vector> edgeList; void dfs(int start){ visitedNodes[start] = true; for(int node : edgeList[start]){ if(!visitedNodes[node]){ dfs(node); } } } int main(){ ios::sync_with_stdio(0); cin.tie(0); int n, m; cin >> n >> m; if(n != m){ cout << 0 << endl; return 0; } visitedNodes.reserve(n+1); edgeList.reserve(n+1); for(int i = 1; i <= m; ++i){ int u, v; cin >> u >> v; edgeList[u].push_back(v); } long long result = 1; for(int start = 1; start <= n; ++start){ if(!visitedNodes[start]){ result = (result * 2) % 998244353; dfs(start); } } cout << result; cout << flush; return 0; }