# exp of sunset ```cpp #include <bits/stdc++.h> using namespace std; const int N = 111, MOD = 1e9 + 7; int inv, ans[N]; bool vis[N]; int rm[] = {88, 2, 49, 14, 20, 91, 56, 79, 44, 81, 57, 73, 65, 67, 46, 84, 66, 17, 31, 53}; int A[N] = {337229599, 325950080, 542718415, 860180877, 323040995, 735779310, 864361739, 339968680, 3785502, 533120016, 467897389, 215111289, 669987332, 343447968, 613364155, 51939983, 765449638, 551522273, 206741830, 696620161, 429342149, 124186177, 279591669, 271013814, 267312863, 288321995, 348764133, 49562754, 432321364, 733407888, 336309352, 680320244, 258955444, 50477576, 936414592, 540997130, 244887424, 802248001, 190201074, 608424912, 230214096, 106258442, 396015541, 632533267, 826926560, 765609879, 938836920, 938836920, 765609879, 826926560, 632533267, 396015541, 106258442, 230214096, 608424912, 190201074, 802248001, 244887424, 540997130, 936414592, 50477576, 258955444, 680320244, 336309352, 733407888, 432321364, 49562754, 348764133, 288321995, 267312863, 271013814, 279591669, 124186177, 429342149, 696620161, 206741830, 551522273, 765449638, 51939983, 613364155, 343447968, 669987332, 215111289, 467897389, 533120016, 3785502, 339968680, 864361739, 735779310, 323040995, 860180877, 542718415, 325950080, 337229599, 243380866, 59055212, 837326354, 161482058, 581310056, 136700435, 58971689, 605319217, 379539507, 605319217, 58971689, 136700435, 581310056, 161482058, 837326354, 59055212, 243380866}; int B[N] = {299803618, 455114136, 158280000, 635585934, 770371709, 383640342, 296136746, 167814744, 69244076, 541537643, 915075673, 662114959, 715449225, 683799468, 84778891, 896156816, 900734048, 198579752, 761121766, 717769786, 696556462, 127571411, 667366203, 170409968, 339590760, 825653373, 824582729, 15723318, 429669228, 984644620, 731130374, 784679266, 21817661, 158555711, 566121948, 42699221, 705127489, 434494456, 798843545, 597222370, 728101364, 552436778, 728101364, 597222370, 798843545, 434494456, 705127489, 42699221, 566121948, 158555711, 21817661, 784679266, 731130374, 984644620, 429669228, 15723318, 824582729, 825653373, 339590760, 170409968, 667366203, 127571411, 696556462, 717769786, 761121766, 198579752, 900734048, 896156816, 84778891, 683799468, 715449225, 662114959, 915075673, 541537643, 69244076, 167814744, 296136746, 383640342, 770371709, 635585934, 158280000, 455114136, 299803618, 22273348, 709433923, 414958344, 318725017, 13092806, 621372737, 546139744, 640412379, 142648001, 843445006, 404605625, 548571564, 663856325, 565838629, 565838629, 663856325, 548571564, 404605625, 843445006, 142648001, 640412379, 546139744, 621372737, 13092806, 318725017, 414958344, 709433923, 22273348}; inline int qpow(int x, int n) { int res = 1; for (; n; n >>= 1, x = 1ll * x * x % MOD) if (n & 1) res = 1ll * res * x % MOD; return res; } void solve(const vector<int> &a) { vector<int> new_A(a.size()); for (int i = 0; i < a.size(); i++)new_A[i] = A[a[i]]; for (int i = 0; i < a.size(); i++) { for (int j = (i + 1) % a.size(), k = 1; j != i; j = (j + 1) % a.size(), k++) { if (k & 1)new_A[i] = (new_A[i] + A[a[j]]) % MOD; else new_A[i] = (new_A[i] - A[a[j]] + MOD) % MOD; } } for (int i = 0; i < a.size(); i++)A[a[i]] = 1ll * new_A[i] * inv % MOD; } int main() { inv = qpow(2, MOD - 2); for (int r:rm) { memset(vis, false, sizeof(vis)); for (int i = 0; i < N; i++) { if (vis[i])continue; vector<int> cyc; for (int j = i; !vis[j]; j = (j + r) % N) vis[j] = true, cyc.push_back(j); assert(cyc.size() & 1), solve(cyc); } } for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) ans[j] = (ans[j] + 1ll * B[i] * A[(j - i + N) % N] % MOD) % MOD; for (int i = 0; i < N; i++) cout << ans[i] << ",\n"[i == N - 1]; return 0; } ```