#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
int n,m,i,j,k;
char s[100];
long long ans;
map<string,int> tot;
int main(){
	scanf("%d",&n);scanf("%s",s);tot.clear();
	for (i=0;i<(1<<n);i++){
		string now="";for (j=0;j<n;j++) if (!((i>>j)&1)) now+=s[j];
		now+="*";for(j=n-1;j>=0;j--) if ((i>>j)&1) now+=s[j];
		tot[now]++;
	}
	for (i=0;i<(1<<n);i++){
		string now="";for (j=0;j<n;j++) if ((i>>j)&1) now+=s[n*2-1-j];
		now+="*";for(j=n-1;j>=0;j--) if (!((i>>j)&1)) now+=s[n*2-1-j];
		ans+=tot[now];
	}printf("%lld\n",ans);return 0;
}
### Prompt

Construct a cpp code solution to the problem outlined:

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<iostream>
#include<cstdio>
#include<map>
using namespace std;
int n,m,i,j,k;
char s[100];
long long ans;
map<string,int> tot;
int main(){
	scanf("%d",&n);scanf("%s",s);tot.clear();
	for (i=0;i<(1<<n);i++){
		string now="";for (j=0;j<n;j++) if (!((i>>j)&1)) now+=s[j];
		now+="*";for(j=n-1;j>=0;j--) if ((i>>j)&1) now+=s[j];
		tot[now]++;
	}
	for (i=0;i<(1<<n);i++){
		string now="";for (j=0;j<n;j++) if ((i>>j)&1) now+=s[n*2-1-j];
		now+="*";for(j=n-1;j>=0;j--) if (!((i>>j)&1)) now+=s[n*2-1-j];
		ans+=tot[now];
	}printf("%lld\n",ans);return 0;
}
```