#pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include #include using namespace std; using namespace atcoder; using ll = long long; using pll = pair; using pii = pair; using mint = modint998244353; constexpr ll mod = 998244353; using MINT = modint1000000007; constexpr ll MOD = 1000000007; int dx[4] = {1, 0, -1, 0}; int dy[4] = {0, 1, 0, -1}; template void print(vector A); mint solve(string S) { int N = S.size(); if (S[0]=='?') { string T1 = S, T2 = S; T1[0] = 'o'; T2[0] = 'x'; return solve(T1)+solve(T2); } mint dp[1000002][2][2][2]; if (S[0] == 'o') { dp[0][1][1][0]=1; } else { dp[0][0][1][0]=1; } for (int i = 0; i < N; i++) { for (int j = 0; j < 2; j++) { for (int k = 0; k < 2; k++) { for (int l = 0; l < 2; l++) { if (S[i] != 'x') { //oか?のとき if (j == 1) { dp[i+1][1][1][l]+=dp[i][j][k][l]; } else { if (k == 1) { dp[i+1][1][0][l]+=dp[i][j][k][l]; } else { if (l<1)dp[i+1][1][0][l+1]+=dp[i][j][k][l]; } } } if (S[i] != 'o') { //xか?のとき if (j == 0) { dp[i+1][j][1][l]+=dp[i][j][k][l]; } else { if (k == 1) { dp[i+1][0][0][l]+=dp[i][j][k][l]; } else { if (l<1)dp[i+1][0][0][l+1]+=dp[i][j][k][l]; } } } } } } } mint ret = 0; for (int j = 0; j < 2; j++) { for (int k = 0; k < 2; k++) { for (int l = 0; l < 2; l++) { //cout<> N; string S; cin >> S; cout< void print(vector A) { for (int i = 0; i < A.size() - 1; i++) { cout << A[i] << ' '; } cout << A[A.size() - 1] << endl; return; }