{B-}
{$M 65520,0,655360}
program skaiciu_braukymas;
  { 76 u‘davinys }
  const m_ld = 100;   { maksimalus lentel‚s dydis   }
        m_sk = 1000;  { maksimalus ižbraukiam— skai‡i— kiekis }
        atgal = -1;   { nusako koordinat‚s pokytŤ ižbraukiant skai‡ius }
        pirmyn = 1;
        vietoj = 0;

  type lentele = array [1..m_ld, 1..m_ld] of char; { lentel‚ }
       skaicius = string [10]; { ižbraukiamas skai‡ius }
       skaiciai = array [1..m_sk] of skaicius; { ižbraukiam— skai‡i— }
                                               { s…ražas }
       isbrauk = array [1..m_ld, 1..m_ld] of boolean;
                 { ‡ia su‘ymimi ižbraukti skai‡iai }
  {--------------------------------------------------------}
  procedure rasti (lent : lentele; { skai‡i— lentel‚ }
                   n, { lentel‚s dydis }
                   sksk, { ižbraukiam— skai‡i— kiekis }
                   skilg : integer; { j— ilgis }
                   skaic : skaiciai;{ patys ižbraukiami skai‡iai }
                   var rez : string);
    { ižbraukia skai‡ius iž lentel‚s ir randa neižbrauktuosius }
    var i, j, vieta : integer;
        isb : isbrauk; { ižbraukt— skai‡i— lentel‚ }

    procedure braukti (x, y, { nuo žio langelio bandoma braukti }
                       dx, dy : integer { ižbraukimo kryptis });
      { ižbraukia skai‡ius nurodyta kryptimi, }
      { prasidedan‡ius nurodytame langelyje }
      { vartojami global–s kintamieji sksk, sklig, skaic, isb }
      var s : string;
          i, j, nm, kiek : integer;
    begin
      { surandame simboli— eilutŠ lentel‚je, kuri prasideda langelyje }
      { (x, y) }
      s := '';
      i := x; j := y;
      while (i in [1..n]) and (j in [1..n]) do
        begin
          s := s + lent[i, j];
          i := i + dx;
          j := j + dy;
        end;
       if skilg <= length (s) { eilut‚ negali b–ti trumpesn‚ u‘ }
                              { iežkom… skai‡i— }
          then begin
                 nm := 1;
                 while (nm <= sksk) and (pos(skaic[nm], s) <> 1) do
                    nm := nm + 1;
                 { jei radome skai‡i— - jŤ ižbraukiame }
                 if nm < sksk + 1
                    then begin
                           i := x; j := y;  kiek := 0;
                           while kiek < skilg do
                             begin
                               kiek := kiek + 1;
                               isb[i, j] := true;
                               i := i + dx;
                               j := j + dy;
                             end;
                         end;
               end;
    end;

  begin
    { kol kas neižbrauktas nei vienas skai‡ius }
    for i := 1 to n do
      for j := 1 to n do
         isb[i, j] := false;
    for i := 1 to n do  { bandysime ižbraukin‚ti prad‚dami }
      for j := 1 to n do { kiekvienu skaitmeniu }
        begin
          { galima ižbraukti 8 kryptimis }
          braukti (i, j, vietoj, pirmyn); { iž kair‚s Ť dežinŠ }
          braukti (i, j, vietoj, atgal);  { iž dežin‚s Ť kairŠ }
          braukti (i, j, pirmyn, vietoj); { iž apa‡ios Ť virž— }
          braukti (i, j, atgal, vietoj);  { iž viržaus Ť apa‡i… }
          braukti (i, j, atgal, pirmyn);  { Ťst. iž kair‚s, iž viržaus }
          braukti (i, j, pirmyn, atgal); { Ťst. iž dežin‚s, iž apa‡ios }
          braukti (i, j, pirmyn, pirmyn); { Ťst. iž kair‚s, iž apa‡ios }
          braukti (i, j, atgal, atgal); { Ťst. iž dežin‚s, iž viržaus }
        end;
    { surandame neižbrauktus skai‡ius }
    rez := '';
    for i := 1 to n do
      for j := 1 to n do
        if not isb[i, j] { jei skai‡ius neižbrauktas }
           then if rez = '' { jŤ Ťterpiame }
                   then rez := lent[i, j]
                   else begin   { iž karto Ť reikiam… viet… }
                          vieta := 1;
                          while rez[vieta] < lent[i, j] do
                            vieta := vieta + 1;
                          insert (lent[i, j], rez, vieta);
                        end;
  end;

  procedure ivedimas (var lent : lentele; { skai‡i— lentel‚ }
                      var n, { lentel‚s dydis }
                          sksk, { ižbraukiam— skai‡i— kiekis }
                          skilg : integer; { j— ilgis }
                      var skaic : skaiciai);{ patys ižbraukiami skai‡iai }
    { Ťveda pradinius duomenis }
    var f : text;
        i, j, skaitmuo : integer;
  begin
    { nuskaitoma lentel‚ }
    assign (f, 'brauk1.dat');
    reset (f);
    readln (f, n);
    for i := n downto 1 do
      begin
        for j := 1 to n do
          begin
            read (f, skaitmuo );
            lent [i, j] := chr (skaitmuo + ord('0'))
          end;
        readln (f)
    end;
    close (f );
    { nuskaitomi skai‡iai }
    assign (f, 'brauk2.dat');
    reset (f);
    readln (f, sksk, skilg);
    for i := 1 to sksk do
      readln (f, skaic[i]);
    close (f)
  end;
  procedure isvedimas (rez : string);
    { ižveda rezultat… }
    var f : text;
  begin
    assign (f, 'brauk.rez');
    rewrite (f);
    writeln (f, rez);
    close (f)
  end;
  {--------------------------------------------------------}
  var n, sksk, skilg : integer;
      lent : lentele;
      skaic : skaiciai;
      rez : string;
begin
   ivedimas (lent, n, sksk, skilg, skaic);
   rasti (lent, n, sksk, skilg, skaic, rez);
   isvedimas (rez);
end.
