#include <cstring>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <memory.h>
#include <cassert>
using namespace std;
typedef long long ll;
const int N = 185;
const int M = 1000 + 1;
bool pri(int x) {
if (x == 2)
return true;
else if (x%2==0)
return false;
for (int i = 3; i * i <= x; i += 2)
if (x%i==0)
return false;
return true;
}
int prime[N], idx = 0;
ll ans[M], d[N][M];
int main() {
int v;
ll sum;
for (int i = 2; i <= 1000; ++i)
if (pri(i))
prime[idx++] = i;
memset(d, 0, sizeof d);
d[0][0] = 1;
for (int i = 0; i < idx; ++i) {
v = prime[i];
while (v < M) {
for (int j = v; j < M; ++j)
d[i+1][j] += d[i][j - v];
v = v * prime[i];
}
for (int j = 0; j < M; ++j)
d[i+1][j] += d[i][j];
}
ans[0] = d[idx][0];
for (int i = 1; i < M; ++i)
ans[i] = ans[i - 1] + d[idx][i];
ans[0] = 0;
int n;
while (~scanf("%d", &n)) {
printf("%I64d\n", ans[n]);
}
return 0;
}