#pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace atcoder; #define rep(i,n,c) for (int i=0;i using vec = vector; template using vvec = vec>; template using vvvec = vec>; using ll = long long; using pii = pair; using pll = pair; using piil = tuple; template inline bool chmin(T &a, T b){ if (a>b){ a = b; return true; } return false; } template inline bool chmax(T &a, T b){ if (a T sum(vec x){ T res=0; for (auto e:x){ res += e; } return res; } using mint = modint998244353; void printv(vec x){ cout<<"{"; for (auto e:x){ cout< subset(int n,vector X){ if (n==0){ return X; } vector Y(1<<(n-1)); vector Z(1<<(n-1)); for (int i=0;i<(1<<(n-1));i++){ Y[i] = X[i]; Z[i] = X[i+(1<<(n-1))]; } auto Y1 = subset(n-1,Y); auto Z1 = subset(n-1,Z); for (int i=0;i<(1<<(n-1));i++){ X[i] = Y1[i]; X[i+(1<<(n-1))] = Y1[i] + Z1[i]; } return X; } vector isubset(int n,vector X){ if (n==0){ return X; } vector Y(1<<(n-1)); vector Z(1<<(n-1)); for (int i=0;i<(1<<(n-1));i++){ Y[i] = X[i]; Z[i] = X[i+(1<<(n-1))]; } auto Y1 = isubset(n-1,Y); auto Z1 = isubset(n-1,Z); for (int i=0;i<(1<<(n-1));i++){ X[i] = Y1[i]; X[i+(1<<(n-1))] = Z1[i] - Y1[i]; } return X; } const ll INF = 1e17; int main(){ ios::sync_with_stdio(false); std::cin.tie(nullptr); int n,a,b; cin>>n; vector A(1< B(1<>a; A[(1<>b; B[i] = (mint)(b); } auto A1 = subset(n,A); reverse(all(A1)); auto B1 = isubset(n,B); vector C(1<