#include #include #include #include #define rep(i,a,b) for(int i=(a);i<(b);i++) #define rrep(i,a,b) for(int i=(b)-1;i>=(a);i--) #define all(x) begin(x),end(x) #define sz(x) (int)(x).size() using namespace std; using namespace atcoder; using ll=long long; using ld=long double; using vll=vector; using vvll=vector; using vi=vector; using vvi=vector; using pll=pair; using pi=pair; using mint=modint998244353; // using BoostPoint=boost::polygon::point_data; // using Voronoi=boost::polygon::voronoi_diagram; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ll N; string s; cin>>N>>s; mint total=mint(2).pow(N-1); mint ans=0; rep(k,0,N){ vector dp(N+1),pref(N+1); dp[0]=1,pref[0]=1; rep(j,1,N+1){ dp[j]=pref[j-1]; if(j>k&&s[j-k-1]=='1'){ dp[j]-=pref[j-k-1]; } pref[j]=pref[j-1]+dp[j]; } mint cnt=total-dp[N]; ans+=mint(2).pow(k)*cnt; } cout<