Files
contests/atcoder/beginner_contests/226/e.cpp

55 lines
858 B
C++

#include <bits/stdc++.h>
using namespace std;
vector<bool> visitedNodes;
vector<vector<int>> 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;
}