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>
 
#ifdef NON_SUBMIT
#define TEST(n) (n)
#define tout cerr
#else
#define TEST(n) ((void)0)
#define tout cin
#endif
 
using namespace std;
 
const int MOD=998244353;
int N, P2[200001], V[200001];
bool chk[200001];
string X;
 
bool check(int SZ)
{
	for(int p=0;p*SZ<N;p++) {
		for(int i=0;i<SZ;i++) {
			if(X[p*SZ+i]<(X[i]-'0'^(p&1))+'0') return false;
			if(X[p*SZ+i]>(X[i]-'0'^(p&1))+'0') return true;
		}
	}
	return true;
}
 
int solve(int SZ)
{
	int ret=0;
	if(check(SZ)) ret=1;
	for(int i=SZ-1;i>=0;i--) if(X[i]=='1') ret=(ret+P2[SZ-1-i])%MOD;
	return ret;
}
 
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	TEST(freopen("input.txt","r",stdin));
	TEST(freopen("output.txt","w",stdout));
	TEST(freopen("debug.txt","w",stderr));
	int ans;
	cin>>N>>X;
	P2[0]=1; ans=2*N;
	for(int i=N-1;i>=0;i--) {
		if(X[i]=='1') ans=(ans+2LL*N*P2[N-1-i])%MOD;
		P2[N-i]=(2*P2[N-1-i])%MOD;
	}
	if(N&1) {
		chk[1]=true;
		V[1]=solve(1);
	}
	for(int i=2;i*i<=N;i++) if(N%i==0) {
		if(N/i&1) {
			chk[i]=true;
			V[i]=solve(i);
		}
		if(i*i!=N && (i&1)) {
			chk[N/i]=true;
			V[N/i]=solve(N/i);
		}
	}
	for(int i=1;i<=N;i++) if(chk[i]) {
		ans=(ans+2LL*(N-i)*(MOD-V[i]))%MOD;
		for(int j=3*i;j<=N;j+=2*i) V[j]=(V[j]+MOD-V[i])%MOD;
	}
	cout<<ans<<'\n';
	return 0;
}