{
TASK:n23
LANG:PASCAL
}
var n,i:Longint;
    base,orig:String;
    s:String;
    found:Boolean;
Function valid(s:String):Boolean;
var i:Longint;
    res:Boolean;
Begin
  res:=true;
 For i:=1 to Length(s) do
  if (s[i]<>'2')and(s[i]<>'3')then
   Begin
     res:=false;
     break;
   End;
  valid:=res;
End;
Function strplus(s1,s2:String):String;
var chain1,chain2:Array[1..256]of Byte;
    i,j,maxi:Longint;
    Res,c:String;
    code:Integer;
Begin
 For i:=1 to 256 do
  Begin
    chain1[i]:=0;
    chain2[i]:=0;
  End;
 For i:=1 to Length(s1) do
  val(s1[i],chain1[Length(s1)-i+1],code);
 For i:=1 to Length(s2) do
  val(s2[i],chain2[Length(s2)-i+1],code);
  if length(s1)<length(s2) then maxi:=length(s2)
                          else maxi:=length(s1);
 For i:=1 to maxi do
  chain1[i]:=chain1[i]+chain2[i];
 if length(s1)<length(s2) then maxi:=length(s2)
                          else maxi:=length(s1);
 For i:=1 to maxi do
  if chain1[i]>9 then
  Begin
    chain1[i+1]:=chain1[i+1]+chain1[i] div 10;
    chain1[i]:=chain1[i] mod 10;
    if i=maxi then maxi:=maxi+1;
  End;
  res:='';
 if maxi<256 then
 For i:=maxi downto 1 do
 Begin
   str(chain1[i],c);
   res:=res+c;
 End
 else res:='NO';
  strplus:=res;
End;
Begin
{  WriteLn(strplus('11','19'));}
  ReadLn(n);
  if n=1 then
  Begin
    WriteLn('2');
    Exit;
  End;
   base:='2';
  For i:=2 to n do
  Begin
    base:=strplus(base,base);
  End;
  found:=false;
  if valid(base) then
  Begin
    WriteLn(base);
    Exit;
  End;
  orig:=base;
 For i:=1 to 10000 do
 Begin
   orig:=strplus(orig,base);
  if orig='NO' then
  Begin
    WriteLn('NO');
    Exit;
  End;
  If valid(orig) then
  Begin
    WriteLn(orig);
    Exit;
  End;
 End;
  WriteLn('NO');
End.