#include <bits/stdc++.h>
using namespace std;
long long frev(long long x, long long y) { return x > y; }
long long findset(long long a, long long ds[], long long rank[]) {
  if (a == ds[a]) return a;
  ds[a] = findset(ds[a], ds, rank);
  return ds[a];
}
long long dsu(long long a, long long b, long long ds[], long long rank[]) {
  long long repa = findset(a, ds, rank);
  long long repb = findset(b, ds, rank);
  if (rank[repa] == rank[repb]) {
    rank[repb]++;
    ds[repa] = repb;
  }
  if (rank[repa] > rank[repb]) {
    ds[repb] = repa;
  } else {
    ds[repa] = repb;
  }
  return 1;
}
long long gcd(long long a, long long b) {
  if (a > b) {
    long long t = a;
    a = b;
    b = t;
  }
  if (b % a == 0)
    return a;
  else
    return gcd(a, b % a);
}
long long sumto(long long x) { return (x * (x + 1)) / 2; }
int main() {
  long long n;
  cin >> n;
  n *= 2;
  vector<vector<long long> > dp(n + 1, vector<long long>(n + 1, 0));
  vector<vector<long long> > rc(n + 1, vector<long long>(n + 1, 0));
  rc[0][0] = 1;
  for (long long l = 1; l <= n; l++) {
    for (long long b = 0; b <= n; b++) {
      long long s = 0;
      long long h = 0;
      if (b != 0) {
        s += dp[l - 1][b - 1];
        s %= 1000000007;
        h = h | rc[l - 1][b - 1];
      }
      if (b + 1 <= l - 1) {
        s += dp[l - 1][b + 1];
        s %= 1000000007;
        h = h | rc[l - 1][b + 1];
      }
      if (h) {
        dp[l][b] = (s + 1) % 1000000007;
        rc[l][b] = 0;
      } else {
        dp[l][b] = s % 1000000007;
        rc[l][b] = 1;
      }
    }
  }
  cout << dp[n][0];
}
