#include <bits/stdc++.h>
using namespace std;
const long long MOD = pow(10, 9) + 7;
bool exists(long long n, long long open) {
  return (n % 2 == open % 2) && n >= open && open >= 0;
}
long long mmod(long long x) { return ((x % MOD) + MOD) % MOD; }
long long sign[] = {-1, 1};
long long dp(vector<long long>& table, long long N, long long n,
             long long open) {
  long long idx = open;
  idx *= N;
  idx += n;
  while (table[idx] == -1) {
    table[idx] = 0;
    if (!exists(n, open)) {
      break;
    }
    for (long long i = 0; i < 2; i++) {
      if (exists(n - 1, open + sign[i])) {
        long long val = 1;
        if (exists(n - 1, open - sign[i])) {
          val = mmod(val + dp(table, N, n - 1, open - sign[i]));
        }
        for (long long j = 0; j < 2; j++) {
          if (exists(n - 2, open + sign[i] + sign[j])) {
            val = mmod(val + dp(table, N, n - 2, open + sign[i] + sign[j]));
          }
        }
        table[idx] = max(table[idx], val);
      }
    }
  }
  return table[idx];
}
int main() {
  long long n;
  cin >> n;
  n *= 2;
  long long N = n + 1;
  vector<long long> table(N * N, -1);
  cout << dp(table, N, n, 0) << endl;
  return 0;
}
