program Untitled;
label izlaz, izlaz2, izlaz3, izlaz4;
var
   sl : array [ 'a'..'z', 'a'..'z' ] of integer;
   n, i, po, k, brr, jj, ima1, ima2 : longint;
   z, zz, crj, nepo2 : char;
   rjisp : string;
   mat : array [ 0..100 ] of char;
   r : array [ 0..105 ] of string;
procedure slovo ( br, poc, kra : longint );
var
   j, kpoc : longint;
begin
     kpoc := poc;
     for j := poc + 1 to kra do
     begin
          if ( length(r[j]) >= br ) and ( length(r[j - 1]) >= br ) and ( r[j][br] <> r[j - 1][br] ) then
          begin
               sl[r[j - 1][br], r[j][br]] := 1;
               if ( br + 1 <= 10 ) and ( j - 1 - kpoc > 0 ) then
               begin
                    slovo ( br + 1, kpoc, j - 1 );
               end;
               kpoc := j;
          end;
     end;
     if ( br + 1 <= 10 ) and ( kra - kpoc > 0 ) then
     begin
          slovo ( br + 1, kpoc, kra );
     end;
end;
procedure postavi ( prv, dru : char );
var
   x : char;
begin
     if crj <> '!' then
     begin
     for x := 'a' to 'z' do
     begin
          if sl[dru, x] = 1 then
          begin
               if sl[prv, x] = -1 then crj := '!';
               if sl[x, prv] = 1 then crj := '!';
               sl[prv, x] := 1;
               sl[x, prv] := -1;
               postavi ( prv, x );
          end;
     end;
     end;
end;
procedure ispis ( znak : char; broj : longint );
label izlaz5, izlaz6;
var
   r, rr : char;
begin
     for z := 'a' to 'z' do
     begin
          for zz := 'a' to 'z' do
          begin
               if ( sl[z, zz] = 1 ) and ( z = znak ) then
               begin
                    for r := 'a' to 'z' do
                    begin
                         for rr := 'a' to 'z' do
                         begin
                              if ( r <> znak ) and ( sl[r, rr] = 1 ) and ( rr = zz ) then goto izlaz5;
                         end;
                    end;
                    rjisp := rjisp + zz;
                    for r := 'a' to 'z' do
                    begin
                         sl[znak, r] := 0;
                    end;
                    if broj + 1 <= brr then ispis ( zz, broj + 1 );
                    goto izlaz6;
                    izlaz5 :
               end;
          end;
     end;
     izlaz6 :
end;
begin
     rjisp := '';
     crj := ' ';
     readln ( n );
     for i := 1 to 100 do
     begin
          mat[i] := ' ';
     end;
     for z := 'a' to 'z' do
     begin
          for zz := 'a' to 'z' do
          begin
               sl[z, zz] := 0;
          end;
     end;
     for i := 1 to n do
     begin
          readln ( r[i] );
     end;
     po := 1;
     for i := 2 to n do
     begin
          if r[i][1] <> r[i - 1][1] then
          begin
               sl[r[i - 1][1], r[i][1]] := 1;
               if ( i - 1 - po > 0 ) then
               begin
                    slovo ( 2, po, i - 1 );
               end;
               po := i;
          end;
     end;
     if ( n - po > 0 ) then
     begin
          slovo ( 2, po, n );
     end;
     for z := 'a' to 'z' do
     begin
          for zz := 'a' to 'z' do
          begin
               if crj <> '!' then
               begin
               if sl[z, zz] = 1 then
               begin
                    if sl[zz, z] = 1 then crj := '!';
                    postavi ( z, zz );
                    sl[zz, z] := -1;
               end;
               end;
          end;
     end;
     brr := 0;
     if crj = '!' then writeln ( crj );
     if crj <> '!' then
     begin

     for i := 1 to n do
     begin
          for jj := 1 to length ( r[i] ) do
          begin
               for k := 1 to brr do
               begin
                    if r[i][jj] = mat[k] then goto izlaz;
               end;
               brr := brr + 1;
               mat[brr] := r[i][jj];
               izlaz :
          end;
     end;
     ima1 := 0;
     ima2 := 0;
     for i := 1 to brr do
     begin
     for z := 'a' to 'z' do
     begin
          for zz := 'a' to 'z' do
          begin
               if ( sl[z, zz] = 1 ) and ( mat[i] = z ) then goto izlaz2;
          end;
     end;
     ima1 := ima1 + 1;
     izlaz2 :
     for z := 'a' to 'z' do
     begin
          for zz := 'a' to 'z' do
          begin
               if ( sl[z, zz] = 1 ) and ( mat[i] = zz ) then goto izlaz3;
          end;
     end;
     ima2 := ima2 + 1;
     izlaz3 :
     end;
     if ( ima1 > 1 ) or ( ima2 > 1 ) then
     begin
          crj := '?';
          writeln ( crj );
     end;
     end;
     if ( crj <> '!' ) and ( crj <> '?' ) then
     begin
          for i := 1 to brr do
          begin
          for z := 'a' to 'z' do
          begin
               for zz := 'a' to 'z' do
               begin
                    if ( sl[z, zz] = 1 ) and ( mat[i] = zz ) then goto izlaz4;
               end;
          end;
          nepo2 := mat[i];
          izlaz4 :
          end;
          rjisp := rjisp + nepo2;
          ispis ( nepo2, 1 );
          writeln ( rjisp );
     end;
readln;
end.
