#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 998244353;
int main() {
cin.tie(0)->sync_with_stdio(0);
int n, m;
cin >> n >> m;
vector<int> adj(n);
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
u--, v--;
adj[u] |= (1 << v);
}
vector<array<ll, 2>> dp(1 << n, {0, 0}); // {# of ways, sum of ways}
dp[0] = {1, 0};
for (int msk = 0; msk < (1 << n); msk++) {
for (int i = 0; i < n; i++) if (1 & ~msk >> i) {
(dp[msk | (1 << i)][0] += dp[msk][0]) %= mod;
(dp[msk | (1 << i)][1] += dp[msk][0] * __builtin_popcount(msk & adj[i]) + dp[msk][1]) %= mod;
}
}
cout << dp[(1 << n) - 1][1] << '\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |