#include using namespace std; using lint = long long int; template using V = vector; template using VV = V< V >; template void assign(V& v, int n, const T& a = T()) { v.assign(n, a); } template void assign(V& v, int n, const U&... u) { v.resize(n); for (auto&& i : v) assign(i, u...); } const lint mod = 1e9 + 7; inline lint emod(lint a, lint p = mod) { return (a % p + p) % p; } inline lint invm(lint a, lint p = mod) { a %= p; return a == 1 ? 1 : -p / a * invm(p % a) % p; } V fact, ifact; void init_table(int n) { fact.assign(n + 1, 1), ifact.assign(n + 1, 1); for (int i = 2; i < n + 1; i++) fact[i] = i * fact[i - 1] % mod; ifact[n] = invm(fact[n]); for (int i = n; i > 2; i--) ifact[i - 1] = i * ifact[i] % mod; } lint mulcomb(lint n, lint r) { if (n < 1 or r < 0) return 0; return fact[r + n - 1] * ifact[r] % mod * ifact[n - 1] % mod; } int main() { cin.tie(NULL); ios::sync_with_stdio(false); lint n; cin >> n; init_table(n + 20); lint res = mulcomb(10, n); cout << emod(res) << '\n'; }