#include <bits/stdc++.h>
using namespace std;

const int64_t MOD = 998244353;
void add(int64_t& a, int64_t b){
    a = (a+b) % MOD;
}
void mul(int64_t& a, int64_t b){
    a = a*b % MOD;
}

int main(){
    string str;
    cin >> str;
    int N = str.size();
    vector<int> S(N);
    for(int i=0; i<N; i++) S[i] = str[i] - '0';

    static int64_t dp[310][310][310];
    dp[N][0][0] = 1;
    for(int i=N; i>0; i--) for(int j=0; j<N; j++) for(int k=0; k<N; k++){
        int64_t v = dp[i][j][k];
        if(S[i-1]){
            add(dp[i][j+1][k], v);
            add(dp[i-1][j][k], v);
        }else{
            add(dp[i][j][k+1], v);
            add(dp[i-1][j][k], v);
        }
    }

    static bool can[310][310][310];
    can[0][0][0] = true;

    int64_t ans = 0;
    for(int i=0; i<=N; i++) for(int j=0; j<N; j++) for(int k=0; k<N; k++) if(can[i][j][k]){
        //cerr<<i<<j<<k<<" "<<dp[i][j][k]<<endl;
        add(ans, dp[i][j][k]);
        can[i+1][j][k] = true;
        if(i<N-1){
            if(S[i] || S[i+1]) can[i+2][j][k+1] = true;
            if(!S[i] || !S[i+1]) can[i+2][j+1][k] = true;
        }
        if(i<N && j && S[i]) can[i+1][j-1][k+1] = true;
        if(i<N && k && !S[i]) can[i+1][j+1][k-1] = true;
    }
    add(ans, MOD-1);

    cout << ans << endl;
    return 0;
}
