program i204;

const
  maxN = 50; // a maximalis racsmeret, feltehetoleg <=50
var
  racs : array [1..maxN,1..maxN] of Char; // a racs tombje
  n : Integer; // a racs merete nxn

procedure RacsBeolvas;
var fracs : Text;
begin
  Assign( fracs,ParamStr(1) );
  ReSet( fracs );

  n := 0;
  while not eof( fracs ) do // soronkent beolvassuk a racsot
  begin
    Inc( n );
    ReadLn( fracs, racs[n] );
  end;
  Close( fracs );
end;

const
  maxSz = 10000; // a szoveg maximalis hossza, feltehetoleg <= 10000 karakter
var
  szoveg : array [1..maxSz] of Char;
  h      : Integer; // az aktualis szoveg hossza

procedure SzovegBeolvas;
var i : Integer;
    fszov : Text;
begin
  Assign( fszov, ParamStr(2) );
  ReSet( fszov );
  h := 0;
  while not eof( fszov ) do // karakterenkent olvassuk a szoveget
  begin
    Inc( h );
    Read( fszov, szoveg[h] );
  end;
  Close( fszov );
end;

procedure SzovegAtalakit;
const
  ekez : array [1..18] of Char = ('‚', '�', ' ', 'µ', '¡', 'Ö', '¢', 'à', '£', 'é','”', '™', '‹', 'Š', '�', 'š', 'û', 'ë' );
  neme : array [1..18] of Char = ('�', '�', 'µ', 'µ', 'Ö', 'Ö', 'à', 'à', 'é', 'é','™', '™', 'Š', 'Š', 'š', 'š', 'ë', 'ë' );
var
  i,m,j : Integer;
  ch  : Char;
begin
  m := 0;
  for i := 1 to h do // vegigmegyunk a szoveg tombon es atrendezzuk ugy ...
  begin
    ch := #0; // (nem megorzendo karakter)
    case szoveg[i] of // ... hogy csak a betuket tartalmazza nagybetusse alakitva
      'a'..'z' : ch := UpCase( szoveg[i] );
      'A'..'Z' : ch := szoveg[i];
      else
        j := 1;
        while (j<=18) and (szoveg[i]<>ekez[j]) do Inc(j); // ekezetes-e
        if j<=18 then // ha ekezet, akkor a parjara csereljuk
          ch := neme[j];
    end;
    if ch <> #0 then // ha megorzendo karakter, akkor atrendezzuk szoveg elejehez
    begin
      Inc(m);
      szoveg[m] := ch;
    end;
  end;
  h := m;
end;

procedure SzovegNovel;
var marad,i : Integer;
begin
  marad := n*n - h mod (n*n); // ennyi karakter hianyzik meg az utolso betunegyzetbol
  for i :=1 to marad do
    szoveg[h+i] := szoveg[i];
  h := h + marad;
end;

var
  negyzet : array [1..maxN, 1..maxN] of Char; // a kovetkezo kimeneti negyzet
  k       : Integer; // a szoveg hanyadik karakterenel tartunk

function LyukKeres( var x,y : Integer ) : Boolean;
var van : Boolean;
begin
  van := false; // meg nincs lyuk

  while (y<=n) and not van do // amig nem talalunk, vagy nincs mar az adott hely utan
  begin
    if racs[y,x]='o' then van := True;
    if not van then
    begin
      Inc(x);
      if x>n then
      begin
        Inc(y);
        x := 1;
      end;
    end;
  end;
  LyukKeres := van;
end;

procedure RacsForgat;
var x,y  : Integer;
    ujracs : array [1..maxN,1..maxN] of Char; // az elforgatott racs
begin
  for x := 1 to n do
    for y := 1 to n do
       ujracs[-x+n+1,y] := racs[y,x];
      // masik irany az oramutatoval ellentetesen ujracs[x,n+1-y] := racs[y,x];
  for x := 1 to n do
    for y := 1 to n do
      racs[y,x] := ujracs[y,x];
end;


procedure KovetkezoNegyzet;
var x,y,i : Integer;
begin
  for i := 1 to 4 do // negyszer vegigmegyunk a racson
  begin
    x :=1; y := 1; // a negyzet bal felso sarkabol indulunk
    while LyukKeres( x,y ) do // amig van lyuk az adott helyrol indulva
    begin
      negyzet[x,y] := szoveg[k];
      Inc( k );
      Inc(x); if x>n then begin x := 1; Inc(y); end;
    end;
    RacsForgat; // elforditjuk a racsot
       // (nem szep, szebb lenne a racs negy allapotat tarolni, es csak 3x forgatni...)
  end;
end;

var fki : Text;
    x,y : Integer;

BEGIN
  RacsBeolvas;
  SzovegBeolvas;
  SzovegAtalakit;
  SzovegNovel;

  Assign( fki, ParamStr(3) );
  ReWrite( fki );
  k := 1; // a szoveg elejere allunk
  while k<=h do
  begin
    KovetkezoNegyzet;
    for y := 1 to n do // kiirjuk filebe
    begin
      for x := 1 to n do
        Write( fki, negyzet[x,y] );
      WriteLn( fki );
    end;
    if k<h then WriteLn( fki );
  end;

  Close( fki );
END.
