https://www.luogu.com.cn/record/96337784
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 20, mod = 19260817;
int n, m, res, c, u, v, cnt[N][N], sum[1 << N], f[N][1 << N][2];
vector<int> G[N];
inline void upd(int& x, int y) {
(x += y) >= mod ? x -= mod : 0;
}
signed main() {
cin >> n >> m;
for (int i = 1; i <= n; i ++)
cin >> u >> v, cnt[u][v] ++, cnt[v][u] ++, G[u].push_back(v), G[v].push_back(u);
cin >> c;
for (int i = 0; i < 1 << n; i ++)
for (int j = 0; j < n; j ++)
if (i & 1 << j) sum[i] += j + 1;
f[1][1][0] = 1;
for (int i = 1; i < 1 << n; i ++)
for (int u = 1; u <= n; u ++)
for (int v = 1; v <= n; v ++) {
if (!cnt[u][v]) continue;
if (i & 1 << (v - 1)) continue;
int S = i | 1 << (v - 1);
upd(f[v][S][(v * sum[i]) & 1], f[u][i][0] * cnt[u][v]);
upd(f[v][S][(v * sum[i] + 1) & 1], f[u][i][1] * cnt[u][v]);
// cout << u << ' ' << v << ' ' << i << ' ' << S << ' ' << f[v][S][(v * sum[i]) & 1] << '\n';
}
for (int i = 0; i < 1 << n; i ++)
upd(res, f[n][i][c]);
cout << res << '\n';
return 0;
}