/**
 * code generated by JHelper
 * More info: https://github.com/AlexeyDmitriev/JHelper
 * @author
 */

#include<bits/stdc++.h>
using namespace std;
using ll=int_fast64_t;
#define fr(i,n) for(int i=0;i<(n);++i)
#define Fr(i,n) for(int i=1;i<=(n);++i)
#define ifr(i,n) for(int i=(n)-1;i>=0;--i)
#define iFr(i,n) for(int i=(n);i>0;--i)

struct modint{
    using i64=int_fast64_t;
    i64 a;
    static constexpr i64 MOD=998244353;
    modint(){a=0;}
    modint(i64 a_){
        a=a_%MOD;
        if(a<0) a+=MOD;
    }
    modint inv()const{
        i64 n=1,m=MOD-2,A=a;
        while(m){
            if(m&1)(n*=A)%=MOD;
            (A*=A)%=MOD;
            m>>=1;
        }
        modint y(n);
        return y;
    }
    bool operator==(const modint& x){
        return a==x.a;
    }
    bool operator!=(const modint& x){
        return a!=x.a;
    }
    modint& operator=(const modint& x){
        a=x.a;
        return *this;
    }
    modint operator+(const modint& x){
        modint y;
        y.a=a+x.a;
        if(y.a>MOD) y.a-=MOD;
        return y;
    }
    modint operator-(const modint& x){
        modint y;
        y.a=a-x.a;
        if(y.a<0) y.a+=MOD;
        return y;
    }
    modint operator*(const modint& x){
        modint y;
        y.a=(a*x.a)%MOD;
        return y;
    }
    modint operator/(const modint& x){
        modint y;
        y.a=(a*x.inv().a)%MOD;
        return y;
    }
    modint& operator+=(const modint& x){
        a+=x.a;
        if(a>=MOD) a-=MOD;
        return *this;
    }
    modint& operator-=(const modint& x){
        a-=x.a;
        if(a<0) a+=MOD;
        return *this;
    }
    modint& operator*=(const modint& x){
        (a*=x.a)%=MOD;
        return *this;
    }
    modint& operator/=(const modint& x){
        (a*=x.inv().a)%=MOD;
        return *this;
    }
};
istream& operator>>(istream &in,modint& x){
    int_fast64_t a_;
    in>>a_;
    modint y(a_);
    x=y;
    return in;
}
ostream& operator<<(ostream &out,const modint& x){
    out<<x.a;
    return out;
}
modint pwr(int_fast64_t a,int_fast64_t b){
    modint _;
    int_fast64_t n=1,A=a;
    while(b){
        if(b&1) (n*=A)%=modint::MOD;
        (A*=A)%=modint::MOD;
        b>>=1;
    }
    _.a=n;
    return _;
}

class CDivisionByTwoWithSomething {
public:
    void solve(istream& in, ostream& out) {
        cin.tie(nullptr);
        ios::sync_with_stdio(false);
        int n;
        string x;
        vector<int> d;
        in>>n>>x;
        bool f=false;
        if(*x.rbegin()-'0'){
            *x.rbegin()='0';
            int A=n-2;
            while(A>=0&&x[A]=='1'){
                x[A]='0';
                --A;
            }
            if(A>=0) x[A]='1';
            else f=true;
        }
        else *x.rbegin()='1';
        for(int i=1;i*i<=n;++i){
            if(n%i==0){
                if(i&1) d.emplace_back(n/i);
                if(i*i!=n) if((n/i)&1) d.emplace_back(i);
            }
        }
        sort(d.begin(),d.end());
        vector<modint> e(d.size());
        vector<bool> g(d.size());
        ifr(i,e.size()){
            e[i]=d[i]*2;
            for(int j=i+1;j<e.size();++j){
                if(d[j]%d[i]==0){
                    e[i]-=e[j];
                }
            }
        }
        modint ans{};
        if(f){
            fr(j,d.size()){
                ans+=pwr(2,d[j])*e[j];
            }
            out<<ans<<endl;
            return;
        }
        fr(i,n){
            if(x[i]-'0'){
                fr(j,d.size()){
                    if(g[j]) continue;
                    if(d[j]<=i){
                        if(x[i-d[j]]-'0'){
                            ans+=e[j];
                            g[j]=true;
                        }
                    }
                    else{
                        ans+=pwr(2,d[j]-i-1)*e[j];
                    }
                }
            }
            else{
                fr(j,d.size()){
                    if(g[j]) continue;
                    if(d[j]<=i) if('1'-x[i-d[j]]) g[j]=true;
                }
            }
        }
        out<<ans<<endl;
    }
};

int main() {
    CDivisionByTwoWithSomething solver;
    std::istream& in(std::cin);
    std::ostream& out(std::cout);
    solver.solve(in, out);
    return 0;
}


Measured memory_bytes: 720