#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = 400010;
class BigNum {
 private:
  int a[500];
  int len;

 public:
  BigNum() {
    len = 1;
    memset(a, 0, sizeof(a));
  }
  BigNum(const int);
  BigNum(const char *);
  BigNum(const BigNum &);
  BigNum &operator=(const BigNum &);
  friend istream &operator>>(istream &, BigNum &);
  friend ostream &operator<<(ostream &, BigNum &);
  BigNum operator+(const BigNum &) const;
  BigNum operator-(const BigNum &) const;
  BigNum operator*(const BigNum &) const;
  BigNum operator/(const int &) const;
  BigNum operator^(const int &) const;
  int operator%(const int &) const;
  bool operator>(const BigNum &T) const;
  bool operator>(const int &t) const;
  void print();
};
BigNum::BigNum(const int b) {
  int c, d = b;
  len = 0;
  memset(a, 0, sizeof(a));
  while (d > 9999) {
    c = d - (d / (9999 + 1)) * (9999 + 1);
    d = d / (9999 + 1);
    a[len++] = c;
  }
  a[len++] = d;
}
BigNum::BigNum(const char *s) {
  int t, k, index, L, i;
  memset(a, 0, sizeof(a));
  L = strlen(s);
  len = L / 4;
  if (L % 4) len++;
  index = 0;
  for (i = L - 1; i >= 0; i -= 4) {
    t = 0;
    k = i - 4 + 1;
    if (k < 0) k = 0;
    for (int j = k; j <= i; j++) t = t * 10 + s[j] - '0';
    a[index++] = t;
  }
}
BigNum::BigNum(const BigNum &T) : len(T.len) {
  int i;
  memset(a, 0, sizeof(a));
  for (i = 0; i < len; i++) a[i] = T.a[i];
}
BigNum &BigNum::operator=(const BigNum &n) {
  int i;
  len = n.len;
  memset(a, 0, sizeof(a));
  for (i = 0; i < len; i++) a[i] = n.a[i];
  return *this;
}
istream &operator>>(istream &in, BigNum &b) {
  char ch[1010 * 4];
  int i = -1;
  in >> ch;
  int L = strlen(ch);
  int count = 0, sum = 0;
  for (i = L - 1; i >= 0;) {
    sum = 0;
    int t = 1;
    for (int j = 0; j < 4 && i >= 0; j++, i--, t *= 10) {
      sum += (ch[i] - '0') * t;
    }
    b.a[count] = sum;
    count++;
  }
  b.len = count++;
  return in;
}
ostream &operator<<(ostream &out, BigNum &b) {
  int i;
  cout << b.a[b.len - 1];
  for (i = b.len - 2; i >= 0; i--) {
    printf("%04d", b.a[i]);
  }
  return out;
}
BigNum BigNum::operator+(const BigNum &T) const {
  BigNum t(*this);
  int i, big;
  big = T.len > len ? T.len : len;
  for (i = 0; i < big; i++) {
    t.a[i] += T.a[i];
    if (t.a[i] > 9999) {
      t.a[i + 1]++;
      t.a[i] -= 9999 + 1;
    }
  }
  if (t.a[big] != 0)
    t.len = big + 1;
  else
    t.len = big;
  return t;
}
BigNum BigNum::operator-(const BigNum &T) const {
  int i, j, big;
  bool flag;
  BigNum t1, t2;
  if (*this > T) {
    t1 = *this;
    t2 = T;
    flag = 0;
  } else {
    t1 = T;
    t2 = *this;
    flag = 1;
  }
  big = t1.len;
  for (i = 0; i < big; i++) {
    if (t1.a[i] < t2.a[i]) {
      j = i + 1;
      while (t1.a[j] == 0) j++;
      t1.a[j--]--;
      while (j > i) t1.a[j--] += 9999;
      t1.a[i] += 9999 + 1 - t2.a[i];
    } else
      t1.a[i] -= t2.a[i];
  }
  t1.len = big;
  while (t1.a[len - 1] == 0 && t1.len > 1) {
    t1.len--;
    big--;
  }
  if (flag) t1.a[big - 1] = 0 - t1.a[big - 1];
  return t1;
}
BigNum BigNum::operator*(const BigNum &T) const {
  BigNum ret;
  int i, j, up;
  int temp, temp1;
  for (i = 0; i < len; i++) {
    up = 0;
    for (j = 0; j < T.len; j++) {
      temp = a[i] * T.a[j] + ret.a[i + j] + up;
      if (temp > 9999) {
        temp1 = temp - temp / (9999 + 1) * (9999 + 1);
        up = temp / (9999 + 1);
        ret.a[i + j] = temp1;
      } else {
        up = 0;
        ret.a[i + j] = temp;
      }
    }
    if (up != 0) ret.a[i + j] = up;
  }
  ret.len = i + j;
  while (ret.a[ret.len - 1] == 0 && ret.len > 1) ret.len--;
  return ret;
}
BigNum BigNum::operator/(const int &b) const {
  BigNum ret;
  int i, down = 0;
  for (i = len - 1; i >= 0; i--) {
    ret.a[i] = (a[i] + down * (9999 + 1)) / b;
    down = a[i] + down * (9999 + 1) - ret.a[i] * b;
  }
  ret.len = len;
  while (ret.a[ret.len - 1] == 0 && ret.len > 1) ret.len--;
  return ret;
}
int BigNum::operator%(const int &b) const {
  int i, d = 0;
  for (i = len - 1; i >= 0; i--) d = ((d * (9999 + 1)) % b + a[i]) % b;
  return d;
}
BigNum BigNum::operator^(const int &n) const {
  BigNum t, ret(1);
  int i;
  if (n < 0) exit(-1);
  if (n == 0) return 1;
  if (n == 1) return *this;
  int m = n;
  while (m > 1) {
    t = *this;
    for (i = 1; (i << 1) <= m; i <<= 1) t = t * t;
    m -= i;
    ret = ret * t;
    if (m == 1) ret = ret * (*this);
  }
  return ret;
}
bool BigNum::operator>(const BigNum &T) const {
  int ln;
  if (len > T.len)
    return true;
  else if (len == T.len) {
    ln = len - 1;
    while (a[ln] == T.a[ln] && ln >= 0) ln--;
    if (ln >= 0 && a[ln] > T.a[ln])
      return true;
    else
      return false;
  } else
    return false;
}
bool BigNum::operator>(const int &t) const {
  BigNum b(t);
  return *this > b;
}
void BigNum::print() {
  int i;
  printf("%d", a[len - 1]);
  for (i = len - 2; i >= 0; i--) printf("%04d", a[i]);
  printf("\n");
}
long long mod = 1e9 + 7;
bool leap[maxn];
bool check(BigNum x) {
  if (x % 2 == 0) return true;
  for (int i = 1; x * 2 + 2 > i; i = i + 1) {
    BigNum temp(i / 2);
    if (temp + 1 > x && x > temp - 1) break;
    if ((x - i / 2) % (i + 1) == 0) {
      return true;
    }
  }
  return false;
}
long long a[] = {
    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,
    24036583, 25964951, 30402457, 32582657};
long long pow_mod(long long a, long long n) {
  long long ans = 1;
  while (n) {
    if (n & 1) ans = ans * a % mod;
    a = a * a % mod;
    n >>= 1;
  }
  return ans;
}
long long sub(long long a, long long b) {
  long long ans = a - b;
  ans = (ans % mod + mod) % mod;
  return ans;
}
int main() {
  int n;
  scanf("%d", &n);
  printf("%I64d\n", sub(pow_mod(2ll, a[n - 1] - 1), 1ll));
  return 0;
}
