program abeceda;

var
   n, i, j, k, koliko, x, y : integer;
   sl, sl1, sl2, poc : char;
   slova : array['a' .. 'z'] of boolean;
   popis : array[1 .. 100] of string[11];
   prije : array['a' .. 'z','a' .. 'z']  of integer;
   nasao : boolean;
   ispis : string;

procedure Nadji (sl : char; s : string);
var
   nema : boolean; z : char;
begin
   if nasao then exit;
   s := Concat(s, sl);
   nema := true;
   for z := 'a' to 'z' do
      if prije[sl,z]=1 then begin
         nema := false; Nadji (z, s);
      end;
   if nema then begin
      if Length(s)=koliko then begin
         nasao := true; ispis := s;
      end;
      exit;
   end;
end;

begin
   for sl1 := 'a' to 'z' do for sl2 := 'a' to 'z' do prije[sl1,sl2] := 2;
   readln (n);
   for i := 1 to n do begin
      readln (popis[i]);
      for k := 1 to Length(popis[i]) do slova[popis[i][k]] := true;
      popis[i] := Concat(popis[i], '.');
   end;
   for sl := 'a' to 'z' do
      if slova[sl] then Inc (koliko);
   for i := 1 to n do
      for j := i+1 to n do begin
         k := 0;
         repeat Inc (k); until popis[i][k]<>popis[j][k];
         if (popis[i][k]<>'.') and (popis[j][k]<>'.') then begin
            if prije[popis[j][k],popis[i][k]]=1 then begin
               writeln ('!'); exit;
            end else begin
               prije[popis[i][k],popis[j][k]] := 1;
               prije[popis[j][k],popis[i][k]] := 0;
            end;
         end;
      end;
   poc := pred('a');
   repeat
      poc := succ(poc);
      x := 0; y := 0;
      for sl := 'a' to 'z' do
         case prije[sl,poc] of
            1 : Inc (x);
            2 : Inc (y);
         end;
   until (x=0) and (y<26);
   nasao := false;
   Nadji (poc, '');
   if nasao then writeln (ispis) else writeln ('?');
end.
