{
TASK:DALIKLIAI
LANG:PASCAL
}
program dalikliai;

  const PRF = 'DAL.DAT';
        RZF = 'DAL.REZ';
        MAX = 100; { maksimalus daliklių skaičius }

   type Tmas = array [0..MAX] of integer;

   { žemiau aprašyti globalieji kintamieji }
   var dal: Tmas;  { duotieji dalikliai }
       n: integer; { duotų daliklių skaičius }

  function maxr (x, y: integer): integer;
  begin
    if x > y
       then maxr := x
       else maxr := y
  end; { maxr }

  function tikrinti (m: integer): integer;
  { tikrina, ar duoti visi skaičiaus m dalikliai, išskyrus vienetą }
  { jei trūksta lygiai vieno daliklio, jį randa }
    var i, daliklis, ind: integer;
  begin
    daliklis := 0;
    ind := 1;
    for i := 2 to m div 2 do
      if m mod i = 0                    { jei m dalosi iš i }
         then if ind <= n               { ir išnagrinėti ne visi dalikliai }
                 then if i = dal[ind]
                         then ind := ind + 1
                         else if (i < dal[ind]) and (daliklis = 0)
                                 then daliklis := i
                                 else daliklis := -1
                 else { gal trūksta paskutinio daliklio }
                      if daliklis = 0
                         then daliklis := i
                         else daliklis := -1;
    if ind <= n { ne visi dalikliai panaudoti }
       then daliklis := -1;
    tikrinti := daliklis;
  end; { tikrinti }

  procedure ieskoti (n: integer; dal: Tmas; var dlk: integer);
    var  m, dlk1, dlk2, dlk3: integer;
  begin
    { jei trūkstamas daliklis lygus 1 }
    if dal[0] <> 1
      then dlk := 1 { pirmasis daliklis visada lygus 1 }
      else begin
             { m, kurio dalikliai duoti, lygus m1 arba m2 ar m3 }
              m := dal[1]*dal[n-1];
              dlk1 := tikrinti (m);
              m := dal[2]*dal[n];
              dlk2 := tikrinti (m);
              m := dal[1]*dal[n];
              dlk3 := tikrinti (m);
              if dlk1 <> -1 then dlk := dlk1
                 else if dlk2 <> -1 then dlk := dlk2
                 else if dlk3 <> -1 then dlk := dlk3
            end
  end; { ieškoti }

  procedure skaityti (var n: integer; var dal: Tmas);
    var i: integer;
        f: text;
  begin
    assign (f, PRF);
    reset (f);
    i := 0;
    read (f, dal[i]);
    while dal[i] <> 0 do
      begin
        i := i + 1;
        read (f, dal[i]);
      end;
    n := i - 1;
  end; { skaityti }

  procedure rasyti (x: integer);
    var f: text;
  begin
    assign (f, RZF);
    rewrite (f);
    writeln (f, x);
    close (f);
  end; { rašyti }

  var dlk: integer;
begin
  skaityti (n, dal);
  ieskoti (n, dal, dlk);
  rasyti (dlk);
end.