#include #include using namespace std; using ll = long long; using mint = atcoder::modint998244353; int main(){ ios::sync_with_stdio(false); cin.tie(0); string s; cin >> s; while(!s.empty() && s.back() == 'B') s.pop_back(); int n = s.size(); reverse(s.begin(), s.end()); vector> tb(n); vector> rng(n); for(int i = 0; i < n; i++){ if(s[i] == 'A'){ tb[i] = {1, 1}; rng[i] = make_pair(0, 1); }else{ tb[i] = {1, 1}; rng[i] = make_pair(-1, 0); } } auto dfs = [&](auto dfs, int l, int r) -> void { if(r - l <= 1) return; int mid = (l + r) / 2; dfs(dfs, l, mid); dfs(dfs, mid, r); tb[l] = atcoder::convolution(tb[l], tb[mid]); rng[l] = make_pair(rng[l].first + rng[mid].first, rng[l].second + rng[mid].second); if(l == 0){ reverse(tb[l].begin(), tb[l].end()); while(rng[l].first < 0){ rng[l].first++; tb[l].pop_back(); } reverse(tb[l].begin(), tb[l].end()); } }; dfs(dfs, 0, n); cout << tb[0][0].val() << '\n'; }