#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; bool rcmp(int a, int b) { return a>b; } typedef long long LL; char ib[200004]; int xs[200004]; int bb[200004*2]; #define MOD 998244353 int dp0[200004]; int dp10[200004]; int main() { int n, i, c, k; LL s, r, t; scanf("%s", ib); for (n=0; ib[n]; n++); bb[0]=1; for (i=0; i<=n+n; i++) { bb[i+1]=(bb[i]*2)%MOD; } s=0; c=0; dp0[n]=0; for (i=n-1; i>=0; i--) { dp0[i]=s; if (ib[i]=='0') s=(bb[c]+s)%MOD; else if (ib[i]=='?') { t=s; t+=s; t%=MOD; t+=bb[c]; t%=MOD; s=t; c++; } } // for (i=0; i=0; i--) { dp10[i]=s; if (ib[i]=='1') s=(s+dp0[i])%MOD; else if (ib[i]=='?') { t=s;t+=s; t%=MOD; t+=dp0[i]; t%=MOD; s=t; } } r=0; s=0; for (i=n-1; i>=0; i--) { if (ib[i]=='0') s=(s+dp10[i])%MOD; else { t=s; t+=s; t%=MOD; t+=dp10[i]; t%=MOD; s=t; } } printf("%lld\n", s); return 0; }