{
TASK:N23
LANG:PASCAL
}

var n,level:integer;
    del,min:string;
    i,j:byte;

function bytetochar(a:byte):char;
 Begin
  bytetochar:=chr(ord('0')+a);
 End;

function chartobyte(c:char):byte;
 Begin
  chartobyte:=ord(c)-ord('0');
 End;

function ge(a,b:string):boolean;
 Begin
  while (length(a)>1) and (a[1]='0') do delete(a,1,1);
  while (length(b)>1) and (b[1]='0') do delete(b,1,1);
  if length(a)>length(b) then begin ge:=true; exit; end;
  if length(b)>length(a) then begin ge:=false; exit; end;
  ge:=(a>=b);
 End;

procedure lead0(var s:string; b:byte);
 var i:byte;
 Begin

  for i:=1 to b do s:='0'+s;
 End;

function add(a,b:string):string;
 var carry,p,i:byte;
  var r:string;
 Begin
  r:='';
  carry:=0;
  if length(a)>length(b) then lead0(b,length(a)-length(b));
  if length(b)>length(a) then lead0(a,length(b)-length(a));
  for i:=length(a) downto 1 do
   begin
    p:=chartobyte(a[i])+chartobyte(b[i])+carry;
    if p>9 then
      begin
       r:=bytetochar(p-10)+r;
       carry:=1;
      end
           else
    begin
     r:=bytetochar(p)+r;
     carry:=0;
    end;
   end;
  while (length(r)>0) and (r[1]='0') do delete(r,1,1);
  add:=r;
 End;

function muldig(s:string;d:byte):string;
var i,p,c:byte;
    r:string;
 Begin
  if d=1 then begin muldig:=s; exit; end;
  if d=0 then begin muldig:='0'; exit; end;

  r:='';
  c:=0;

  for i:=length(s) downto 1 do
   begin
    p:=chartobyte(s[i])*d+c;
    if p>9 then
     begin
      r:=bytetochar(p mod 10)+r;
      c:=p div 10;
     end
           else
     begin
      r:=bytetochar(p)+r;
      c:=0;
     end;
    end;
  if c>0 then r:=bytetochar(c)+r;
  while (length(r)>1) and (r[1]='0') do delete(r,1,1);
  muldig:=r;
 End;

function sub(a,b:string):string;
 var i,bor:byte;
     p:shortint;
     r:string;
 Begin
  if length(a)>length(b) then lead0(b,length(a)-length(b));
  if length(b)>length(a) then lead0(a,length(b)-length(a));

  r:='';
  bor:=0;
  for i:=length(a) downto 1 do
   begin
    p:=chartobyte(a[i])-chartobyte(b[i])-bor;
    if p<0 then
     begin
      bor:=1;
      r:=bytetochar(p+10)+r;
     end
           else
     begin
      r:=bytetochar(p)+r;
      bor:=0;
     end;
   end;
  while (length(r)>1) and (r[1]='0') do delete(r,1,1);
  sub:=r;
 End;

function getrem(a,b:string):string;
 var r:string;
     i,d:byte;
 Begin
  r:='';
  for i:=1 to length(a) do
   begin
    r:=r+a[i];
    d:=9;
    while not ge(r,muldig(b,d))
     do dec(d);
    r:=sub(r,muldig(b,d));
   end;
  while (length(r)>1) and (r[1]='0') do delete(r,1,1);
  getrem:=r;
 End;

function oi(a:integer):string;
var r:string;
    i:byte;
 Begin
  r:='1';
  for i:=1 to a do r:=muldig(r,2);
  oi:=r;
 End;

procedure bt(u:string);
 Begin
  if length(u)>length(min) then exit;
  if (length(u)>n) or (length(u)>100) then exit;

  if getrem(u,del)='0' then
   if not ge(u,min) then
    min:=u;

  bt('2'+u);
  bt('3'+u);
 End;



BEGIN
 readln(n);
 if n=2 then begin
         writeln('2');
         halt(0);
        end;
 del:='1';
 min:='5';
 for i:=1 to 8 do min:=min+min;
 for i:=1 to n do del:=muldig(del,2);
 bt('2');
 if not(min='5') then writeln(min)
  else writeln('NO');
END.