#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i,a) for(int i=0;i<(a);i++)
const ll MOD=1000000007;

int main(){
  int N; cin>>N;
  string S; cin>>S;
  map<pair<string,string>, ll> mp1,mp2;
  rep(i,(1<<N)){
    string A="",B="",C="",D="";
    rep(j,N){
      if((i>>j)&1){
        A+=S[j];
        C+=S[N+j];
      }else{
        B+=S[j];
        D+=S[N+j];
      }
    }
    reverse(B.begin(),B.end());
    reverse(D.begin(),D.end());
    mp1[make_pair(A,B)]++;
    mp2[make_pair(D,C)]++;
  }
  ll ans=0;
  for(auto m:mp1){
    ans+=m.second*mp2[m.first];
  }
  cout<<ans<<endl;
  return 0;
}

### Prompt

In Cpp, your task is to solve 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>
using namespace std;
typedef long long ll;
#define rep(i,a) for(int i=0;i<(a);i++)
const ll MOD=1000000007;

int main(){
  int N; cin>>N;
  string S; cin>>S;
  map<pair<string,string>, ll> mp1,mp2;
  rep(i,(1<<N)){
    string A="",B="",C="",D="";
    rep(j,N){
      if((i>>j)&1){
        A+=S[j];
        C+=S[N+j];
      }else{
        B+=S[j];
        D+=S[N+j];
      }
    }
    reverse(B.begin(),B.end());
    reverse(D.begin(),D.end());
    mp1[make_pair(A,B)]++;
    mp2[make_pair(D,C)]++;
  }
  ll ans=0;
  for(auto m:mp1){
    ans+=m.second*mp2[m.first];
  }
  cout<<ans<<endl;
  return 0;
}

```