Given are integers N and X. For each integer k between 0 and X (inclusive), find the answer to the following question, then compute the sum of all those answers, modulo 998244353.

* Let us repeat the following operation on the integer k. Operation: if the integer is currently odd, subtract 1 from it and divide it by 2; otherwise, divide it by 2 and add 2^{N-1} to it. How many operations need to be performed until k returns to its original value? (The answer is considered to be 0 if k never returns to its original value.)

Constraints

* 1 \leq N \leq 2\times 10^5
* 0 \leq X < 2^N
* X is given in binary and has exactly N digits. (In case X has less than N digits, it is given with leading zeroes.)
* All values in input are integers.

Input

Input is given from Standard Input in the following format:


N
X


Output

Print the sum of the answers to the questions for the integers between 0 and X (inclusive), modulo 998244353.

Examples

Input

3
111


Output

40


Input

6
110101


Output

616


Input

30
001110011011011101010111011100


Output

549320998
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5+7;
const ll mod = 998244353;
const int sz = 25;
#define afdafafafdafaf y1;
int n,m;
int ar[maxn];

char ch[maxn];

ll f[maxn], f2[maxn];
int vis[maxn];
vector<ll> divs, coe;
int main()
{
    scanf("%d", &n);
    scanf("%s", ch);
    for(int i=1;i<=n;i++){
        if(n % i == 0 && (n / i) % 2== 1){
            divs.push_back(i);
        }
    }
    coe = vector<ll>(divs.size() , 0);
    for(int i=divs.size() - 1; i>=0 ;i--){
        coe[i] = divs[i] * 2;
        for(int j=i+1; j<divs.size(); j++){
            if((divs[j] % divs[i] == 0) && ((divs[j] / divs[i]) % 2 == 1)){
                coe[i] = (coe[i] - coe[j] + mod) % mod;
            }
        }
    }
    ll ans = 0;
    for(int i=0;i<n;i++)ar[i] = ch[i] - '0';
    for(int i=0;i<divs.size();i++){
        ll x = divs[i];
        ll mid = 0;
        for(int i=0;i<x;i++){
            mid = (mid * 2 + ar[i]) % mod;
        }
        int flag = 0;
        for(int i=1;i<n/x;i++){
            for(int j=0;j<x;j++){
                int now = ar[j] ^ (i & 1);
                assert(now == 1 || now == 0);
                if(now > ar[j + i * x])flag = -1;
                if(now < ar[j + i * x])flag = 1;
                if(flag != 0)break;
            }
            if(flag != 0)break;
        }
        if(flag >= 0)mid = (mid + 1) % mod;
        mid = mid * coe[i] % mod;
        ans = (ans + mid) % mod;
    }
    printf("%lld\n", ans);
    return 0;
}
