#include <cstdio>
#include <cstring>
#include <cassert>
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>

#define FOR(i, a, b) for (int i = (a); i < (b); ++i)
#define REP(i, n) FOR (i, 0, n)
#define _ << " _ " <<
#define TRACE(x) cerr << #x << " = " << x << endl
#define debug(...) fprintf(stderr, __VA_ARGS__)
//#define debug
//#define TRACE(x)

using namespace std;

typedef long long llint;

const int MAXN = 105;
const int MOD = 1e9 + 7;

inline int add(int a, int b) { return a + b >= MOD ? a + b - MOD : a + b; }

int n, a[MAXN], dp[MAXN][MAXN][MAXN];

int f(int i, int idx, int tot) {
  if (i < 0) return 1;
  if (dp[i][idx][tot] != -1) return dp[i][idx][tot];

  int ret = 0;

  int add_first = (a[i-1] == a[i]) ? 0 : 1;
  int add_last = (a[2*n-1-i] == a[2*n-2-i]) ? 0 : 1;

  FOR(j, 1, tot + 1) {
    int rem = max(abs(j - idx) - 1, 0);
    int new_idx = (idx < j) ? idx + 1 : j;
    ret = add(ret, f(i-1, new_idx+add_first, tot-rem+add_first+add_last));
  }

  //TRACE(i _ idx _ tot _ ret);
  return dp[i][idx][tot] = ret;
}

int main(void) {
  memset(dp, -1, sizeof(dp));
  scanf("%d",&n);
  REP(i, 2*n-1) scanf("%d",&a[i]);
  sort(a, a + (2*n-1));

  printf("%d\n",f(n-1,1,1));
  
  return 0;
}
