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.
