#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<ctime>
#include<map>
#include<bitset>
#include<set>
#define LL long long
#define mp(x,y) make_pair(x,y)
#define pll pair<long long,long long>
#define pii pair<int,int>
using namespace std;
inline int read()
{
	int f=1,x=0;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
int stack[20];
template<typename T>inline void write(T x)
{
	if(x<0){putchar('-');x=-x;}
    if(!x){putchar('0');return;}
    int top=0;
    while(x)stack[++top]=x%10,x/=10;
    while(top)putchar(stack[top--]+'0');
}
template<typename T>inline void pr1(T x){write(x);putchar(' ');}
template<typename T>inline void pr2(T x){write(x);putchar('\n');}
const int MAXN=105;
const int mod=1e9+7;
void ad(int &x,int y){x+=y;if(x>=mod)x-=mod;}
int n,m,a[MAXN],f[MAXN][MAXN][MAXN];
int main()
{
	n=read();m=2*n-1;
	for(int i=1;i<=m;i++)a[i]=read();
	sort(a+1,a+1+m);
	f[n][1][0]=1;
	for(int i=n-1;i>=1;i--)
	{
		int al=(a[i]!=a[i+1]),ar=(a[2*n-i]!=a[2*n-i-1]);
		for(int l=1;l<=2*n-i;l++)
			for(int r=0;r+l<=2*n-i;r++)if(f[i+1][l][r])
			{
				for(int fl=1;fl<=l+al;fl++)ad(f[i][l+al-fl+1][r+ar+(fl>1)],f[i+1][l][r]);
				for(int fr=1;fr<=r+ar;fr++)ad(f[i][l+al+1][r+ar-fr],f[i+1][l][r]);
			}
	}
	int ans=0;
	for(int l=0;l<=2*n-1;l++)for(int r=0;r+l<=2*n-1;r++)ad(ans,f[1][l][r]);
	pr2(ans);
	return 0;
}
