program samokslininkai;
const
   maxDydis = 100;           { maksimalus lentel‚s dydis   }
type
   { Tinkelis  }
   TTink = array [1..maxDydis,1..maxDydis] of boolean;
   { Raid‘i— lentel‚ }
   TRaidLent = array [1..maxDydis, 1..maxDydis] of char;

var
  Tink : TTink;
  RaidLent : TRaidLent;
  pr : string;     { pranežimas }
  dydis : integer; { raid‘i— lentel‚s dydis }

procedure spausdink_tinkleli;
  var i, j :integer;
   f : text;
begin
   assign (f, 'samoksl.rez');
   rewrite (f);
   for i := 1 to dydis do
      begin
        for j := 1 to dydis do
          if Tink [j, i]
            then write (f, 'O')
            else write (f, 'X');
        writeln(f);
      end;
   close (f);
end;

procedure sprendimas;
  var pr_raide, i, j : integer;
begin
  fillchar (Tink, sizeof(Tink), false);  { ižvalome tinklelŤ }
  pr_raide := 1;
  for j := 1 to dydis do
    for i := 1 to dydis do
       { tikriname ar i stulpelio j eilut‚s raid‚ atitinka
         pranežimo pr_raide-…j… raidŠ ir ar apsukus, t.y., dydis+1-i
         stulpelio dydis+1-j eilut‚s raid‚ atitinka pr_raide nuo galo
         pranežimo simbolŤ }
       if (pr [ pr_raide ] = RaidLent [i,j]) and
          (pr [ length(pr)+1-pr_raide ] = RaidLent [dydis+1-i, dydis+1-j ])
        then
          begin
            Tink [i,j] := true;
            inc (pr_raide);
            if pr_raide > length(pr) div 2 then exit;
          end;
end;

procedure skaityk_duomenis;
  var f : text;
      i, j : integer;
begin
  assign (f, 'samoksl.dat');
  reset (f);
  readln (f, pr);
  readln (f, dydis);
  for i := 1 to dydis do
    begin
      for j := 1 to dydis do
         read (f, RaidLent[j,i]);
      readln (f);
    end;
  close (f);
end;

begin
  skaityk_duomenis;
  sprendimas;
  spausdink_tinkleli;
end.