#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace atcoder; typedef long long ll; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define repr(i, n) for (int i = (int)(n) - 1; i >= 0; i--) #define repk(i, k, n) for (int i = k; i < (int)(n); i++) #define all(v) v.begin(), v.end() #define mod1 1000000007 #define mod2 998244353 #define mod3 100000007 #define vi vector #define vs vector #define vc vector #define vl vector #define vb vector #define vvi vector> #define vvc vector> #define vvl vector> #define vvb vector> #define vvvi vector>> #define vvvl vector>> #define pii pair #define pil pair #define pli pair #define pll pair #define vpii vector> #define vpll vector> #define vvpii vector>> #define vvpll vector>> template void debug(T e) { cerr << e << endl; } template void debug(vector &v) { rep(i, v.size()) { cerr << v[i] << " "; } cerr << endl; } template void debug(vector> &v) { rep(i, v.size()) { rep(j, v[i].size()) { cerr << v[i][j] << " "; } cerr << endl; } } template void debug(vector> &v) { rep(i, v.size()) { cerr << v[i].first << " " << v[i].second << endl; } } template void debug(set &st) { for (auto itr = st.begin(); itr != st.end(); itr++) { cerr << *itr << " "; } cerr << endl; } template void debug(multiset &ms) { for (auto itr = ms.begin(); itr != ms.end(); itr++) { cerr << *itr << " "; } cerr << endl; } template void debug(map &mp) { for (auto itr = mp.begin(); itr != mp.end(); itr++) { cerr << itr->first << " " << itr->second << endl; } } void debug_out() { cerr << endl; } template void debug_out(Head H, Tail... T) { cerr << H << " "; debug_out(T...); } using mint = modint998244353; void debug_mint1(vector &vec) { for (int i = 0; i < vec.size(); i++) { cerr << vec[i].val() << " "; } cerr << endl; } void debug_mint2(vector> &vec) { for (int i = 0; i < vec.size(); i++) { for (int j = 0; j < vec[i].size(); j++) { cerr << vec[i][j].val() << " "; } cerr << endl; } } void dfs(ll l, ll r, string &S, vector &rr, vector &rb, vector &br, vector &bb){ if (l == r - 1){ rr.push_back(0); rb.push_back(1); br.push_back(1); bb.push_back(0); if (S[l] == 'R'){ rr.push_back(1); rb.push_back(0); br.push_back(0); bb.push_back(0); } else{ rr.push_back(0); rb.push_back(0); br.push_back(0); bb.push_back(1); } return; } rr.assign(r - l + 1, 0LL); rb.assign(r - l + 1, 0LL); br.assign(r - l + 1, 0LL); bb.assign(r - l + 1, 0LL); ll mid = (l + r) / 2; vector rr_form; vector rb_form; vector br_form; vector bb_form; dfs(l, mid, S, rr_form, rb_form, br_form, bb_form); vector rr_latt; vector rb_latt; vector br_latt; vector bb_latt; dfs(mid, r, S, rr_latt, rb_latt, br_latt, bb_latt); vector rr1 = convolution(rr_form, br_latt); vector rr2 = convolution(rb_form, rr_latt); vector rb1 = convolution(rb_form, rb_latt); vector rb2 = convolution(rr_form, bb_latt); vector br1 = convolution(br_form, br_latt); vector br2 = convolution(bb_form, rr_latt); vector bb1 = convolution(br_form, bb_latt); vector bb2 = convolution(bb_form, rb_latt); for (ll i = 0; i < r - l + 1; i++){ rr[i] = (rr1[i] + rr2[i]) % mod2; rb[i] = (rb1[i] + rb2[i]) % mod2; br[i] = (br1[i] + br2[i]) % mod2; bb[i] = (bb1[i] + bb2[i]) % mod2; } } int main() { ll N; cin >> N; string S; cin >> S; vector rr; vector rb; vector br; vector bb; dfs(0, N, S, rr, rb, br, bb); for (ll i = 1; i <= N; i++){ ll ans = (rr[i] + rb[i] + br[i] + bb[i]) % mod2; cout << ans << endl; } }