#include <bits/stdc++.h>
using namespace std;
template <typename T1, typename T2>
istream &operator>>(istream &in, pair<T1, T2> &p) {
  in >> p.first >> p.second;
  return in;
}
template <typename T>
istream &operator>>(istream &in, vector<T> &v) {
  for (auto &x : v) in >> x;
  return in;
}
template <typename T1, typename T2>
ostream &operator<<(ostream &out, const std::pair<T1, T2> &p) {
  out << "[" << p.first << ", " << p.second << "]"
      << "\n";
  return out;
}
inline int gc() {
  static const int BUF = 1e7;
  static char buf[BUF], *bg = buf + BUF, *ed = bg;
  if (bg == ed) fread(bg = buf, 1, BUF, stdin);
  return *bg++;
}
inline int ri() {
  int x = 0, f = 1, c = gc();
  for (; c < 48 || c > 57; f = c == '-' ? -1 : f, c = gc())
    ;
  for (; c > 47 && c < 58; x = x * 10 + c - 48, c = gc())
    ;
  return x * f;
}
const double EPS = 1e-10;
const long long inf = 0x7fffffff;
const long long infLL = 0x7fffffffffffffffLL;
const long long mod = 1e9 + 7;
const int maxN = 1e3 + 7;
const long long ONE = 1;
const long long evenBits = 0xaaaaaaaaaaaaaaaa;
const long long oddBits = 0x5555555555555555;
int n;
long long dp[maxN][maxN];
long long ans;
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);
  ;
  cin >> n;
  dp[n][n] = 0;
  for (int k = (2 * n - 1); k >= (0); --k) {
    int tmp = min(n, k);
    for (int l = (tmp); l >= ((k + 1) / 2); --l) {
      int r = k - l;
      if (l < n) dp[l][r] += dp[l + 1][r];
      dp[l][r] += dp[l][r + 1];
      dp[l][r] += (l + r) % 2;
      dp[l][r] %= mod;
    }
  }
  cout << dp[0][0] << endl;
  return 0;
}
