#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:100000000000")
bool ascending(int i, int j) { return (i < j); }
bool descending(int i, int j) { return (i > j); }
using namespace std;
const int MOD = 1000 * 1000 * 1000 + 7;
unsigned long long powmod(unsigned long long a, unsigned long long b,
                          unsigned long long m) {
  unsigned long long x = a, p = 1;
  while (b > 0) {
    if (b % 2) p = ((p % m) * (x % m)) % m;
    b /= 2;
    x = ((x % m) * (x % m)) % m;
  }
  return p;
}
int main() {
  int mersenne[] = {0,       2,       3,       5,        7,       13,
                    17,      19,      31,      61,       89,      107,
                    127,     521,     607,     1279,     2203,    2281,
                    3217,    4253,    4423,    9689,     9941,    11213,
                    19937,   21701,   23209,   44497,    86243,   110503,
                    132049,  216091,  756839,  859433,   1257787, 1398269,
                    2976221, 3021377, 6972593, 13466917, 20996011};
  int n;
  cin >> n;
  cout << powmod(2, mersenne[n] - 1, MOD) - 1 << endl;
}
