program Amstrongo_skaiciai;

  { Ði programa gerai tinka patikrinti, ar duotasis skaièius
    yra Amstrongo skaièius. Taèiau, kai reikia ieðkoti Amstrongo skaièiaus,
    neverta visiems ið eilës skaièiams skaièiuoti kiek jie turi skaitmenø.
    Tai galima padaryti paprasèiau. Pabandykite patobulinti ðià programà }

  function laipsnis (x: longint; n: longint): longint;
  { skaièius pakeliamas nurodytu laipsniu }
  begin
    if n = 1 then laipsnis := x
             else laipsnis := x * laipsnis (x, n-1);
  end; { laipsnis }

  function skaitm_sk (x: longint): longint;
  { randa x skaitmenø skaièiø }
  begin
    if x div 10 = 0
       then skaitm_sk := 1
       else skaitm_sk := 1+ skaitm_sk (x div 10);
  end; { skaitm_sk }

  function amstr_sk (x: longint): boolean;
  { patikrina, ar x yra Amstrongo skaièius }
    var s, skaic, xx, i: longint;
  begin
    s := skaitm_sk (x);
    skaic := 0; xx := x;
    for i := 1 to s do
      begin
        skaic := skaic + laipsnis (xx mod 10, s);
        xx := xx div 10;
      end;
    amstr_sk := x = skaic;
  end; { amstr_sk }

  var m: longint;
      rasta: boolean;
begin
  rasta := false;
  readln (m);
  while not rasta do { jei pradinis duomuo korektiðkas, ciklas
                       visada baigsis }
    begin
      rasta := amstr_sk (m);
      m := m - 1;
    end;
  writeln (m+1);
end.
