#include<bits/stdc++.h> usingnamespace std; #define ll long long constint INF = 0x3f3f3f3f; constint N = 5e5 + 10; const ll mod = 998244353; int T; ll K[110][110]; voidadd(int x, int y){ K[x][x]++; K[y][y]++; K[x][y]--; K[y][x]--; } ll gauss(int n){ ll res = 1ll; for (int i = 1; i <= n - 1; i++) { for (int j = i + 1; j <= n - 1; j++) { while (K[j][i]) { int t = K[i][i] / K[j][i]; for (int k = i; k <= n - 1; k++) K[i][k] = (K[i][k] - t * K[j][k] % mod + mod) % mod; swap(K[i], K[j]); res = -res; } } res = (res*K[i][i]) % mod; } return (res + mod) % mod; } int n, m; structE { int u, v; ll w; }; vector<E>es; ll Pow(ll a, ll b){ ll res = 1ll; while (b) { if (b & 1)res = res * a%mod; a = a * a%mod; b >>= 1; } return res; } intmain(){ scanf("%d", &T); while (T--) { es.clear(); scanf("%d%d", &n, &m); memset(K, 0, sizeof(K)); for (int i = 1; i <= m; i++) { int u, v; ll w; scanf("%d%d%lld", &u, &v, &w); es.push_back(E{ u,v,w }); add(u, v); } ll all = gauss(n); ll ans = 0ll; for (int i = 0; i <= 30; i++) { memset(K, 0, sizeof(K)); for (E& e : es) { if ((e.w >> i) & 1) add(e.u, e.v); } ans = (ans + gauss(n)*(1ll << i) % mod) % mod; } printf("%lld\n", ans*Pow(all, mod - 2) % mod); } return0; }
#include<bits/stdc++.h> usingnamespace std; #define ll long long constint INF = 0x3f3f3f3f; constint N = 5e5 + 10; const ll mod = 998244353; int T; int n; int num[20][10], a[N]; int mp[]{ 0,1,1,4,5,1,4,1,9,1,9,1,1,4,5,1,4,1,9,1,9 }; unordered_set<int>st[20][10]; intmain(){ memset(a, -1, sizeof(a)); for (int i = 1; i <= 12; i++) { num[i][1] = mp[i]; for (int j = 2; j <= 4; j++) { num[i][j] = num[i][j - 1] * 10 + mp[i + j - 1]; } } for (int len = 1; len <= 12; len++) { for (int l = 1; l + len - 1 <= 12; l++) { int r = l + len - 1; if (len <= 4)st[l][r].insert(num[l][len]); for (int i = l; i < r; i++) { for (int u : st[l][i]) { for (int v : st[i + 1][r]) { if (u + v <= 5000)st[l][r].insert(u + v); if (u * v <= 5000)st[l][r].insert(u * v); } } } } } for (int r = 1; r <= 12; r++) { for (int u : st[1][r]) { if (a[u] == -1)a[u] = r; } } scanf("%d", &T); while (T--) { scanf("%d", &n); printf("%d\n", a[n]); } return0; }