program simtalanges_saskes;
   const PR = 'SASKE.DAT';
         RZ = 'SASKE.REZ';
         MAX = 200; { maksimalus ‘ingsni— skai‡ius }
         DYDIS = 50; { juod— langeli— skai‡ius lentoje }
   type langelis = (balta, juoda, nieko, uz_ribu);
        lenta = array [0..DYDIS] of langelis;
                { nulinis lentos langelis visuomet yra u‘ rib— }
        lentele = array [1..MAX] of integer;
        h_kryptis = (kairen, desinen);
        v_kryptis = (zemyn, aukstyn);

   { ‘emiau apražyti globalieji kintamieji }
   var b, j: integer; { balt— bei juod— žažki— skai‡ius lentoje }
       bal: lentele; { balt— žažki— vieta lentoje }
       l: lenta; { žažki— ižsid‚stymas lentoje }
       zin, { pdaryt— ‘ingsni— skai‡ius }
       ej,  { padaryt— ‚jim— skai‡ius }
       min_zin, min_ej : integer; { minimal–s ‚jim— bei ‘ingsni— skai‡iai }
       zings,  { padarytieji ‘ingsniai }
       ej_nr, { ‘ingsnius atitinkan‡i— ‚jim— numeriai }
       min_ej_nr, min_zings: lentele;   { padarytieji ‚jimai }

  function koks_langelis (lang: integer; h: h_kryptis; v: v_kryptis): integer;
    { nustato Ť kokŤ langelŤ pakli–sime, jei iž langelio lang paeisime
      nurodyta kryptimi }
    var liek: integer;
  begin
    liek := lang mod 10;
    if (h = kairen) and (liek = 1) or (h = desinen) and (liek = 0)
       then lang := 0 { u‘ lentos rib— }
    else begin
           if v = aukstyn
              then lang := lang + 5
              else lang := lang - 5;
           if (h = kairen) and (liek >= 1) and (liek <= 5)
              then lang := lang - 1
           else if (h = desinen) and ((liek = 0) or (liek > 5))
              then lang := lang + 1;
         end;
    if (lang >= 1) and (lang <= 50)
       then koks_langelis := lang
       else koks_langelis := 0 { u‘ lentos rib— }
  end; { koks_langelis }

  procedure eiti (ej, zin,
                  kirsta: integer { kuria baltaja žažk‚ buvo kirsta praeitu
                                    ‘ingsniu});
    { rekusrin‚ proced–ra, atliekanti visu Ťmanomus ‚jimus }
    var dama: boolean; { ar baltoji žažk‚ jau yra dama }
        i, lan1, lan2, buves: integer;
        horiz: h_kryptis;
        vert: v_kryptis;
  begin
    { patikrinsime, gal nors viena baltoji žažk‚ jau yra dama }
    dama := false;
    for i := 1 to b do
      dama := dama or (bal[i] >= 46);
    { jei baltoji žažk‚ yra dama, gal radome trumpesnŤ keli… }
    if dama and (ej < min_ej)
       then begin { Ťsimename gaut… rezultat… }
              min_zings := zings;
              min_zin := zin;
              min_ej_nr := ej_nr;
              min_ej := ej;
            end;
    { jei žažk‚ tapo dama arba viržytas minimalus ‚jim— skai‡ius,
      rekursija sustabdoma }
    if dama or (ej >= min_ej) then exit;
    { jei n‚ viena baltoji žažk‚ dar n‚ra dama }
    for i := 1 to b do { eisime kiekviena balta žažke }
      for horiz := kairen to desinen do { bandysime eiti visomis keturiomis }
         for vert := zemyn to aukstyn do { kryptimis }
           begin
             { randame du gretimus langelius }
             lan1 := koks_langelis (bal[i], horiz, vert);
             lan2 := koks_langelis (lan1, horiz, vert);
             { bandome paeiti arba kirsti }
             if (l[lan1] = nieko) and (vert = aukstyn)
                then begin { bandome paeiti: naujas ‚jimas }
                       zings[zin+1] := bal[i];
                       ej_nr[zin+1] := ej + 1;
                       zings[zin+2] := lan1;
                       ej_nr[zin+2] := ej + 1;
                       buves := bal[i];
                       bal[i] := lan1;
                       l[lan1] := balta;
                       l[buves] := nieko;
                       eiti (ej+1, zin+2, 0);
                       { atstatome reikžmes }
                       l[lan1] := nieko;
                       l[buves] := balta;
                       bal[i] := buves;
                     end
             else if (l[lan1] = juoda) and (l[lan2] = nieko)
                  then begin { bandome kirsti }
                          buves := bal[i];
                          bal[i] := lan2;
                          l[buves] := nieko;
                          l[lan1] := nieko;
                          l[lan2] := balta;
                          if kirsta = i { jei tŠsiasi tas pats ‚jimas }
                             then begin
                                    zings[zin+1] := lan2;
                                    ej_nr[zin+1] := ej;
                                    eiti (ej, zin+1, i)
                                  end
                             else begin { jei tai naujas ‚jimas }
                                    zings[zin+1] := buves;
                                    ej_nr[zin+1] := ej+1;
                                    zings[zin+2] := lan2;
                                    ej_nr[zin+2] := ej + 1;
                                    eiti (ej+1, zin+2, i);
                                  end;
                          { atstatome reikžmes }
                          bal[i] := buves;
                          l[buves] := balta;
                          l[lan1] := juoda;
                          l[lan2] := nieko;
                       end;
           end;
  end; { eiti }

  procedure tapti_dama;
    { pagrindin‚ proced–ra }
    { jos pradiniai duomenys: b, j, bal, l }
    { jos gauti rezultatai - min_zin, min_ej, min_ej_nr, min_zings }
    var uzimta: boolean;
        i: integer;
  begin
    { jei paskutinioji eil‚ u‘imta juodomis žažk‚mis - sprendinio n‚ra }
    uzimta := true;
    for i := 46 to 50 do
      uzimta := uzimta and (l[i] = juoda);
    min_ej := 16; { sprendinyje ‚jim— skai‡ius neviržys 15 }
    ej := 0;  { dar nepadarytas n‚ vienas ‚jimas }
    zin := 0; { ir n‚ vienas ‘ingsnis }
    if not uzimta then eiti (ej, 0, 0); { rekursižkai iežkome sprendinio }
    if min_ej = 16 { jei sprendinio neradome }
       then min_ej := 0;
  end; { tapti_dama }

  procedure skaityti (var b, j: integer; var l: lenta; var bal: lentele);
    var f: text;
        i, x: integer;
  begin
    l[0] := uz_ribu;
    for i := 1 to DYDIS do
      l[i] := nieko;
    assign (f, PR);
    reset (f);
    readln (f, b);
    for i := 1 to b do
      begin
        read (f, bal[i]);
        l[bal[i]] := balta;
      end;
   readln (f, j);
   for i := 1 to j do
     begin
       read (f, x);
       l[x] := juoda;
     end;
   close (f);
  end; { skaityti }

  procedure spausdinti (min_ej, min_zin: integer;
                        min_ej_nr, min_zings: lentele);
    var f: text;
        i: integer;
  begin
    assign (f, RZ);
    rewrite (f);
    writeln (f, min_ej);
    for i := 1 to min_zin-1 do
      begin
        write (f, min_zings[i], ' ');
        if (min_ej_nr[i] <> min_ej_nr[i+1])
           then writeln (f);
      end;
    if min_zin <> 0
       then write (f, min_zings[min_zin]);
    close (f);
  end; { spausdinti }

begin
  skaityti (b, j, l, bal);
  tapti_dama;
  spausdinti (min_ej, min_zin, min_ej_nr, min_zings);
end.