program kuoliukai;
  { 90 u‘davinys }
  {----------------------------------------------------------------------}
  procedure bangos (var f: text;
                    n: integer;   { n >= 2 }
                    var  max_isg,  max_ig:  integer);
    var ilg1, ilg2,               { gretim— kuoliuk— ilgiai }
        i,                        { kuoliuko numeris [0..n-1] }
        pra_isg, pra_ig,          { ižgaubtos ir gaubtos bang— prad‘ios }
        vienodu_pr:      integer; { vienodo ilgio kuoliuk— prad‘ia }
        vir_isg, vir_ig: boolean; { pasiekta  bangos virž–n‚ }

    {--------------------------------------------------------------------}
    procedure bangu_tyrimas (l1, l2:  integer;
                             var pra: integer;  { bangos prad‘ia }
                             var vir: boolean;  { ar rasta virž–n‚ }
                             var max: integer); { ilgiausia rasta banga }
    { vartojami global–s kintamieji - i ir vienod—_pr }
    begin
      if (pra = -1) and (l1 < l2)     { prasideda pirma banga }
        then pra := i - 1
      else if (pra <> -1) and (l1 > l2)    { pasiekta bangos virž–n‚ }
             then vir := true
      else if vir and ((l1 < l2) or (i = n))     { prasideda nauja banga }
             then                                { arba baig‚si tvorel‚  }
               begin
                 if max < vienodu_pr - pra + 1
                   then max := vienodu_pr - pra + 1;
                 pra := i - 1;
                 vir := false
               end;
    end;  { bang—_tyrimas }
    {--------------------------------------------------------------------}
  begin
    max_isg := 0;      max_ig := 0;
    pra_isg := -1;     pra_ig := -1;   { -1, nes kuoliuk— numeriai nuo 0 }
    vir_isg := false;  vir_ig := false;
    read (f, ilg2);
    for i := 1  to  n do   { Pridedame dar vien… kuoliuk… (su numeriu n) }
      begin                { tokio pat ilgio, kaip ir paskutiniojo  (su  }
        ilg1 := ilg2;      { numeriu n-1). Tuomet bus apdorota ir banga, }
        if  i < n          { kuri baigiasi su tvorel‚s pabaig….          }
          then  read (f, ilg2);
         { Ižgaubt— bang— tyrimas }
        bangu_tyrimas (ilg1, ilg2, pra_isg, vir_isg, max_isg);
         { ­gaubt— bang— tyrimas }
        bangu_tyrimas (ilg2, ilg1, pra_ig, vir_ig, max_ig);
        if ilg1 <> ilg2            { Jei iž eil‚s bus keli vienodo ilgio }
          then  vienodu_pr := i;   { kuoliukai, tai vienod—_pr nurodin‚s }
                                   { pirm… iž j—. Jei kuoliukai skirtingo}
      end;                         { ilgio, tai vienod—_pr bus lygus i-1 }
  end;  { bangos }

  {----------------------------------------------------------------------}
  var f: text;
      v: string;
      n, isg, iga: integer;
begin                         { pagrindin‚ programos dalis }
  assign (f, 'KUOL.DAT');
  reset (f);
  readln (f, n);
  if n < 2
     then begin
            isg := 0; iga := 0;
          end
     else bangos (f, n, isg, iga);
  close (f);
  writeln ('Ilgiausia ižgaubta banga: ', isg : 2);
  writeln ('Ilgiausia gaubta banga:  ', iga : 2);
end.

