#include <bits/stdc++.h>
using namespace std;
void swap(int &x, int &y) {
  int t = x;
  x = y;
  y = t;
}
int max(int x, int y) { return x > y ? x : y; }
int min(int x, int y) { return x < y ? x : y; }
const int inf = 0x3F3F3F3F;
const int M = 15 + 5;
int T, cas;
int n, m;
int ans[41] = {1,         3,         15,        63,        4095,      65535,
               262143,    73741816,  536396503, 140130950, 487761805, 319908070,
               106681874, 373391776, 317758023, 191994803, 416292236, 110940209,
               599412198, 383601260, 910358878, 532737550, 348927936, 923450985,
               470083777, 642578561, 428308066, 485739298, 419990027, 287292016,
               202484167, 389339971, 848994100, 273206869, 853092282, 411696552,
               876153853, 90046024,  828945523, 697988359};
void preSof() { return; }
void run() {
  int i, j;
  printf("%d\n", ans[n - 1]);
}
int main() {
  preSof();
  while (~scanf("%d", &n)) run();
  return 0;
}

### Prompt

Your challenge is to write a cpp solution to the following problem:

Consider the following equation: 

<image> where sign [a] represents the integer part of number a.

Let's find all integer z (z > 0), for which this equation is unsolvable in positive integers. The phrase "unsolvable in positive integers" means that there are no such positive integers x and y (x, y > 0), for which the given above equation holds.

Let's write out all such z in the increasing order: z1, z2, z3, and so on (zi < zi + 1). Your task is: given the number n, find the number zn.

Input

The first line contains a single integer n (1 ≤ n ≤ 40).

Output

Print a single integer — the number zn modulo 1000000007 (109 + 7). It is guaranteed that the answer exists.

Examples

Input

1


Output

1

Input

2


Output

3

Input

3


Output

15

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
void swap(int &x, int &y) {
  int t = x;
  x = y;
  y = t;
}
int max(int x, int y) { return x > y ? x : y; }
int min(int x, int y) { return x < y ? x : y; }
const int inf = 0x3F3F3F3F;
const int M = 15 + 5;
int T, cas;
int n, m;
int ans[41] = {1,         3,         15,        63,        4095,      65535,
               262143,    73741816,  536396503, 140130950, 487761805, 319908070,
               106681874, 373391776, 317758023, 191994803, 416292236, 110940209,
               599412198, 383601260, 910358878, 532737550, 348927936, 923450985,
               470083777, 642578561, 428308066, 485739298, 419990027, 287292016,
               202484167, 389339971, 848994100, 273206869, 853092282, 411696552,
               876153853, 90046024,  828945523, 697988359};
void preSof() { return; }
void run() {
  int i, j;
  printf("%d\n", ans[n - 1]);
}
int main() {
  preSof();
  while (~scanf("%d", &n)) run();
  return 0;
}

```