{ XIII Lietuvos RespublikinÓ Informatikos Olimpiada }
{   TreÑiojo etapo Antroji dalis VIII - IX klasÓs   }
{                                                   }
{          PIRMAS UÏDAVINYS - ,,PAVEIKSLAS``        }
{                                                   }
{  Pateikto sprendimo pirmojo varianto realizacija  }
{                                                   }

program Paveikslas;

const

  MAX_NM = 1000;
  MAX_L  = 1000;

type

  TElementas = record      { Lentos elementas, t.y. langelis }
    sp: Char;  { langelio spalva }
  end;

  TLenta = array[1..MAX_NM, 1..MAX_NM] of TElementas;


  TSkaitliukas = array[1..MAX_NM] of longint;


  TKoordinate = packed record { Sutaupysim 2x vietos + greiÑiau veiks }
    e, s: Word;
  end;

  TEile = array[1..MAX_NM*MAX_NM] of TKoordinate;

var

  EilSk, StSk: longint;   { prad. duomenÖ N ir M }
  lenta: TLenta;
  esk, ssk: TSkaitliukas; { netuÕÑiÖ eiluÑiÖ ir stulpeliÖ skaitliukai }

  q: TEile;        { EilÓ bangai ir                                       }
  qh, qt: longint; { eilÓs galva bei uodega atitinkamai (queue head/tail) }

                               { Rezultatai:                              }
  fig_sk, maxfig_plt: longint; { fig×rÖ skaiÑius bei didØiausias plotas;  }
  maxfig_lng: TKoordinate;     { didØiausios fig×ros kuris nors langelis; }
  maxfig_spl: char;            { ir to langelio (bei fig×ros) spalva.     }

{ Masyvai dideli, iÕ viso iÕeina apie 7MB. Nieko, FreePascal'is "patemps" }


{ ½vedame pradinius duomenis, iÕ karto uØpildome lentÐ ir
  sutvarkome skailtliukus }
procedure ivesti_duomenis;

var

  f: text;
  lSp: Char;                   { lapelio spalva   }
  lE1, lS1, lE2, lS2: longint; { lapelio matmenys }
  i, e, s: longint; { atitinkamÖ ciklÖ kintamieji }
  LapSk: longint;   { LapeliÖ skaiÑius. Daugiau ÕiÖ duomenÖ neprireiks ;) }

begin
  Assign(f, 'PAVEIKS.DAT');
  Reset(f);
    readln(f, EilSk, StSk, LapSk);
    { IÕ eilÓs ant lentos "padedame" kiekvienÐ lapelÔ }
    for i := 1 to LapSk do
    begin
      readln(f, lSp, lE1, lS1, lE2, lS2);
      for e := lE1 to lE2 do
        for s := lS1 to lS2 do
        begin
          if lenta[e, s].sp = #0 then
          begin
            { dedam Ô tuÕÑiÐ langelÔ: reikia atnaujinti skaitliukus }
            Inc(esk[e]);
            Inc(ssk[s]);
          end;
          { Ant virÕaus padÓtas lapelis dengia Øemiau gulintÔ,
            taigi matysis tas, kurÔ vÓliausiai padÓsim }
          lenta[e, s].sp := lSp;
        end;
    end;
  Close(f);
end;

{ LeidØiam bangÐ (t.y. bangas -- banguojam :) ) tol, kol visi
  netuÕti langeliai bus priskirti kuriai nors surastai fig×rai.
  Tai suØinosime iÕ skaitliukÖ. Pakeliui surandame ir didØiausio
  ploto fig×rÐ }
procedure surasti_figuras;

var

  e, s: longint; { eilutÓ ir stulpelis }
  sp: Char;      { nagrinÓjamos fig×ros spalva }

  { dar vienas fig×ros langelis: Ôtraukiam Ô eilÒ ir atnaujinam kt. inf. }
  procedure langelis(e, s: longint);
  var
    r: TKoordinate;
  begin
    { iÕvalom langelÔ, kad daugiau nenagrinÓtume }
    lenta[e, s].sp := #0;
    dec(esk[e]); dec(ssk[s]);
    { Ôtraukiam Ô eilÒ }
    r.e := e; r.s := s;
    q[qh] := r;
    inc(qh);
  end;

  { bangos frontas: tikrinam, ar duotas langelis priklauso fig×rai }
  procedure bandyk(e, s: longint);
  begin
    if (e < 1) or (e > EilSk) or
       (s < 1) or (s > StSk) or
       (lenta[e, s].sp <> sp) then Exit;
    { Tinka }
    langelis(e, s);
  end;

  { leidØiam bangÐ iÕ (e, s) ir randam visÐ fig×rÐ }
  procedure figura(e, s: longint);
  begin
    sp := lenta[e, s].sp; { fig×ros spalva }
    Inc(fig_sk);
    { inicialiazuojam eilÒ }
    qh := 1; qt := 1;
    { pirmas fig×ros langelis - Ô eilÒ }
    langelis(e, s);
    { eilÓs apdorojimas }
    while (qt < qh) do
    begin
      with q[qt] do
      begin
        { bandom lietis Ô langelius, gretimus eilÓje esanÑiam }
        bandyk(e, s + 1);
        bandyk(e, s - 1);
        bandyk(e + 1, s);
        bandyk(e - 1, s);
      end;
      Inc(qt);
    end;
    { Visa fig×ra rasta. qt = fig×ros_plotas + 1 :) }
    Dec(qt);
    if qt > maxfig_plt then
    begin
      { Fig×ros plotas didesnis, nei didØiausias prieÕ tai rastas }
      maxfig_plt := qt;
      maxfig_lng := q[1]; { galim imti bet kurÔ iÕ q[1..qt] }
      maxfig_spl := sp;
    end;
  end;

begin
  { Per skaitliukus "bÓgsime" iÕ pradØiÖ eilutÓmis, paskui stulpeliais }
  e := 1;
  while e <= EilSk do { bÓgam eilutÓmis }
    if esk[e] > 0 then
    begin
      { EilutÓ netuÕÑia - bÓgam stulpeliais }
      s := 1;
      while lenta[e, s].sp = #0 do { Jei programa veikia teisingai, }
        Inc(s);           { visada "pribÓgsim" netuÕÑiÐ stulpelÔ }
      { Kompiliatorius ÕÔ ciklÐ turÓtÖ suoptimizuoti, nes
        paÑiame cikle e nesikeiÑia ir pakanka analizuoti
        masyvÐ (lenta[e])[], o ne lenta[][] (atsikratom vieno matmens) }
      { Taigi, grÔØtam prie reikalo. e, s - naujos fig×ros langelis }
      figura(e, s);
      { Radom fig×rÐ, bet eilutÓ galÓjo likti netuÕÑia: pakartojam ciklÐ }
    end
    else
      { EilutÓ tuÕÑia - praleidØiam }
      Inc(e);

end;

{ IÕvedame atsakymÐ graØiai Ô bylÐ, kaip kad nurodyta sÐlygoje! }
procedure isvesti_atsakyma;

var

  f: text;

begin
  Assign(f, 'PAVEIKS.REZ');
  Rewrite(f);
    writeln(f, fig_sk,
               ' ', maxfig_spl,
               ' ', maxfig_plt,
               ' ', maxfig_lng.e,
               ' ', maxfig_lng.s
           );
  Close(f);
end;

begin
  ivesti_duomenis;
  surasti_figuras;
  isvesti_atsakyma;
end.


