signedmain(){ cin >> n; n *= 2; LL ans = 0; for (int x = 1; x <= sqrt(n); x++) { if (n % x == 0) { LL tmp = n / x + 1 - x; if (tmp % 2 == 0) ans++; } } cout << ans * 2; return0; }
constint MAXN = 1E5 + 5; constint MAXS = (1 << 17); constint MOD = 1E9 + 7; int n, m, k; vector<int> G[MAXN]; int dis[17][17], dp[MAXS][17]; int tag[MAXN], vis[MAXN], d[MAXN], c[18];
voidbfs(int s){ for (int i = 1; i <= n; i++) d[i] = 1e9, vis[i] = 0; queue<int> q; q.push(s); d[s] = 0; while (!q.empty()) { int now = q.front(); q.pop(); if (vis[now]) continue; vis[now] = 1; for (auto& to : G[now]) { if (d[to] > d[now] + 1) { d[to] = d[now] + 1; q.push(to); } if (tag[to]) dis[tag[s] - 1][tag[to] - 1] = dis[tag[to] - 1][tag[s] - 1] = d[to]; } } }
signedmain(){ ios::sync_with_stdio(false); cin >> n >> m; for (int i = 1; i <= m; i++) { int u, v; cin >> u >> v; G[u].push_back(v); G[v].push_back(u); } cin >> k; for (int i = 1; i <= k; i++) { cin >> c[i]; tag[c[i]] = i; } for (int i = 0; i < k; i++) for (int j = 0; j < k; j++) dis[i][j] = 1e9; for (int i = 1; i <= k; i++) bfs(c[i]);
for (int i = 0; i < (1 << k); i++) for (int j = 0; j < k; j++) dp[i][j] = 1e9; for (int i = 0; i < k; i++) dp[1 << i][i] = 1; for (int s = 1; s < (1 << k); s++) if (__builtin_popcount(s) != 1) for (int i = 0; i < k; i++) { if ((s >> i) & 1) for (int j = 0; j < k; j++) if ((s >> j) & 1) dp[s][i] = min(dp[s][i], dp[s ^ (1 << i)][j] + dis[i][j]); } int ans = 1e9; for (int i = 0; i < k; i++) ans = min(ans, dp[(1 << k) - 1][i]); cout << (ans == 1e9 ? -1 : ans); return0; }