#include using namespace std; using ll=long long; const ll ILL=2167167167167167167; const int INF=2100000000; #define rep(i,a,b) for (int i=(int)(a);i<(int)(b);i++) #define all(p) p.begin(),p.end() template using _pq = priority_queue, greater>; template int LB(vector &v,T a){return lower_bound(v.begin(),v.end(),a)-v.begin();} template int UB(vector &v,T a){return upper_bound(v.begin(),v.end(),a)-v.begin();} template bool chmin(T &a,T b){if(b bool chmax(T &a,T b){if(a void So(vector &v) {sort(v.begin(),v.end());} template void Sore(vector &v) {sort(v.begin(),v.end(),[](T x,T y){return x>y;});} bool yneos(bool a,bool upp=false){if(a){cout<<(upp?"YES\n":"Yes\n");}else{cout<<(upp?"NO\n":"No\n");}return a;} template void vec_out(vector &p,int ty=0){ if(ty==2){cout<<'{';for(int i=0;i<(int)p.size();i++){if(i){cout<<",";}cout<<'"'< T vec_min(vector &a){assert(!a.empty());T ans=a[0];for(auto &x:a) chmin(ans,x);return ans;} template T vec_max(vector &a){assert(!a.empty());T ans=a[0];for(auto &x:a) chmax(ans,x);return ans;} template T vec_sum(vector &a){T ans=T(0);for(auto &x:a) ans+=x;return ans;} int pop_count(long long a){int res=0;while(a){res+=(a&1),a>>=1;}return res;} template T square(T a){return a * a;} #include using mint = atcoder::static_modint<924844033>; void solve(); // DEAR MYSTERIES / TOMOO int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int t = 1; // cin >> t; rep(i, 0, t) solve(); } void solve(){ string S; cin >> S; S = "0" + S + "0"; vector p, q; for (int l = 0, r = 0; l < (int)S.size(); l = r){ swap(p, q); while (r != (int)S.size() && S[l] == S[r]) r++; p.push_back(r - l); } if (q.empty()){ cout << (int)(S.size()) - 2 << "\n"; return; } mint dp0 = p[0], dp1 = 0; rep(i, 0, q.size()){ dp1 += dp0 * q[i]; dp0 += dp1 * p[i + 1]; } cout << (dp1 * p.back()).val() << "\n"; } /* * 大きくない方を消す? * 圧縮すると、 * その中の数を変えることは可能 * また、0 を消すことが可能 * 端に 0 の塊がある場合、そいつの塊を消して答えを求めた後、(塊の大きさ) + 1 を答えにかければいい * 両端に 0 の塊がないとき、 * 両端に 0 を 1 つずつくっつけ、これらは必ず残すことにする。 * 残す 0 の塊を決め打つ * すると、prod (0 の塊) * prod(0 の塊に挟まれている 1 の数) * となる。 * これは 1 に対して積の和典型を用いると、dp が可能になる。 */