#include <bits/stdc++.h>
#define int long long
#define r(i,n) for(int i=0;i<n;i++)
using namespace std;

typedef pair<string,string>P;

int n,ans;
string s;
map<pair<string,string> ,int>M;


signed main(){
	cin>>n>>s;
	string t=s.substr(n);
	r(i,(1<<n)){
		int x=__builtin_popcount(i);
		string y="",z="";
		r(j,n){
			if((1<<j)&i)y+=t[j];
			else z+=t[j];
		}
		reverse(y.begin(),y.end());
		reverse(z.begin(),z.end());
		M[P(y,z)]++;
	}
	t=s.substr(0,n);
	r(i,(1<<n)){
		int x=__builtin_popcount(i);
		int z=n-x;
		string y="",Z="";
		r(j,n){
			if((1<<j)&i)y+=t[j];
			else Z+=t[j];
		}
		if(y>Z)swap(y,Z);
		ans+=M[P(y,Z)];
		ans+=M[P(Z,y)];

	}
	cout<<ans/2<<endl;
}
### Prompt

Please create a solution in Cpp to the following problem:

You are given a string S of length 2N consisting of lowercase English letters.

There are 2^{2N} ways to color each character in S red or blue. Among these ways, how many satisfy the following condition?

* The string obtained by reading the characters painted red from left to right is equal to the string obtained by reading the characters painted blue from right to left.

Constraints

* 1 \leq N \leq 18
* The length of S is 2N.
* S consists of lowercase English letters.

Input

Input is given from Standard Input in the following format:


N
S


Output

Print the number of ways to paint the string that satisfy the condition.

Examples

Input

4
cabaacba


Output

4


Input

11
mippiisssisssiipsspiim


Output

504


Input

4
abcdefgh


Output

0


Input

18
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa


Output

9075135300

### Response

```cpp
#include <bits/stdc++.h>
#define int long long
#define r(i,n) for(int i=0;i<n;i++)
using namespace std;

typedef pair<string,string>P;

int n,ans;
string s;
map<pair<string,string> ,int>M;


signed main(){
	cin>>n>>s;
	string t=s.substr(n);
	r(i,(1<<n)){
		int x=__builtin_popcount(i);
		string y="",z="";
		r(j,n){
			if((1<<j)&i)y+=t[j];
			else z+=t[j];
		}
		reverse(y.begin(),y.end());
		reverse(z.begin(),z.end());
		M[P(y,z)]++;
	}
	t=s.substr(0,n);
	r(i,(1<<n)){
		int x=__builtin_popcount(i);
		int z=n-x;
		string y="",Z="";
		r(j,n){
			if((1<<j)&i)y+=t[j];
			else Z+=t[j];
		}
		if(y>Z)swap(y,Z);
		ans+=M[P(y,Z)];
		ans+=M[P(Z,y)];

	}
	cout<<ans/2<<endl;
}
```