1 var i,j,k,n,tot,tmp:longint;
2 check:array[0..1500] of boolean;
3 p:array[0..1500] of longint;
4 f:array[0..1500,0..1500] of int64;
5 procedure getprimes;
6 var i,j,k:longint;
7 begin
8 tot:=0;
9 fillchar(check,sizeof(check),true);
10 for i:=2 to n do
11 begin
12 if check[i] then begin inc(tot);p[tot]:=i;end;
13 for j:=1 to tot do
14 begin
15 k:=i*p[j];
16 if k>n then break;
17 check[k]:=false;
18 if i mod p[j]=0 then break;
19 end;
20 end;
21 end;
22 procedure main;
23 begin
24 readln(n);
25 getprimes;
26 for i:=0 to n do f[0,i]:=1;
27 for i:=0 to tot do f[i,0]:=1;
28 for i:=1 to tot do
29 begin
30 for j:=1 to n do
31 begin
32 inc(f[i,j],f[i-1,j]);
33 k:=p[i];
34 while k<=j do
35 begin
36 inc(f[i,j],f[i-1,j-k]);
37 k:=k*p[i];
38 end;
39 end;
40 end;
41 writeln(f[tot,n]);
42 end;
43 begin
44 main;
45 end.