// 根は x=0 か |x|=1なるやつだけ // 共役なやつは、同じじゃないとまずい // -> a+b+... + 2(A+B+C+) = N みたいな問題をいくつか解ければいい //母関数パンチ! //すみません、面倒すぎませんか... //bostanmoriなのでパクる maspy さんありがとう... #include #include #include using namespace std; using namespace atcoder; using ll = long long; template using vc = vector; #define FOR(i, a, b) for (int i = a; i < int(b); ++i) using mint = modint998244353; int len(vector a){ return a.size(); } mint Bostan_Mori(vc P, vc Q, ll K) { int d = len(Q) - 1; while (K > 0) { vc Q_minus(d + 1); FOR(i, 0, d + 1) Q_minus[i] = (i & 1 ? -Q[i] : Q[i]); vc U = convolution(P, Q_minus); vc V = convolution(Q, Q_minus); P.clear(), Q.clear(); for (int i = K % 2; i < len(U); i += 2) P.push_back(U[i]); for (int i = 0; i < len(V); i += 2) Q.push_back(V[i]); K /= 2; } return P[0]; } void solve() { ll n;cin>>n; vector P={0,-2,0,2,-2}; vector Q={-1,2,1,-4,2}; mint ANS = Bostan_Mori(P, Q, n); cout << ANS.val() << "\n"; } signed main() { cin.tie(nullptr); ios_base::sync_with_stdio(false); solve(); }