#include <bits/stdc++.h>
using namespace std;
long long p = 1e9 + 7;
const int maxsz = 200000;
long long factorial[maxsz];
long long invfact[maxsz];
long long POWER(long long x, long long y) {
  if (y == 0) return 1;
  long long f = POWER(x, y / 2);
  f *= f;
  f %= p;
  if (y % 2 == 1) {
    f *= x;
    f %= p;
  }
  return f;
}
long long Pow(long long x, long long y) {
  long long x1 = x % p;
  x1 += p;
  x1 %= p;
  long long y1 = y % (p - 1);
  y1 += (p - 1);
  y1 %= (p - 1);
  return POWER(x1, y1);
}
long long inverse(long long x) { return Pow(x, p - 2); }
void podfact() {
  factorial[0] = 1;
  for (int i = 1; i < maxsz; i++) {
    long long k = i;
    factorial[i] = factorial[i - 1] * k;
    factorial[i] %= p;
  }
  invfact[maxsz - 1] = inverse(factorial[maxsz - 1]);
  for (int i = maxsz - 2; i >= 0; i--) {
    long long k = i;
    invfact[i] = (k + 1) * invfact[i + 1];
    invfact[i] %= p;
  }
}
long long C(int n, int k) {
  long long x = factorial[n] * invfact[k];
  x %= p;
  x *= invfact[n - k];
  return x % p;
}
long long ans[10000];
long long qua[10000];
int main() {
  podfact();
  int n;
  cin >> n;
  ans[0] = 0;
  qua[0] = 1;
  for (int k = 1; k <= n; k++) {
    long long locans = 0;
    for (int i = 0; i < k - 1; i++) {
      int g = k - 1 - i;
      long long ck_1 = C(2 * g, g);
      long long k1 = g + 1;
      ck_1 *= inverse(k1);
      ck_1 %= p;
      locans += (ans[i] * ck_1) % p;
      locans %= p;
    }
    locans += qua[k - 1];
    locans %= p;
    ans[k] = locans;
    long long q = 0;
    for (int i = 0; i < k; i++) {
      int g = k - 1 - i;
      long long ck_1 = C(2 * g, g);
      long long k1 = g + 1;
      ck_1 *= inverse(k1);
      ck_1 %= p;
      q += (qua[i] * ck_1) % p;
      q %= p;
    }
    q++;
    q += qua[k - 1];
    q %= p;
    qua[k] = q;
  }
  cout << ans[n];
  return 0;
}
