program Bus; {$APPTYPE CONSOLE} uses SysUtils; var Data: array[0..6000] of Cardinal; F: Text; I: Integer; N: Cardinal; Timeline: array[1..100000] of Cardinal; Peaks: Cardinal; Peak: array[1..6000] of Cardinal; ActN: Cardinal; procedure ResetTimeline(); var I: Integer; begin for I:=1 to 100000 do Timeline[I]:=0; end; procedure CalcTimeline(); var I,J: Integer; begin for J:=0 to (N-1) do if Data[J*2]<>0 then for I:=Data[J*2] to Data[J*2+1] do Inc(Timeline[I]); end; procedure Del(P: Cardinal); begin Dec(ActN); Data[P*2]:=0; end; procedure Sub(P: Cardinal); var I: Integer; begin for I:=0 to (N-1) do if ((Data[I*2]<=P)and(Data[I*2+1]>=P)) then Del(I); end; procedure Add(P: Cardinal); begin Inc(Peaks); Peak[Peaks]:=P; Sub(P); end; procedure ProcessTimeline(); var Pn, Pv: Cardinal; I: Integer; begin Pn:=0; Pv:=0; for I:=1 to 100000 do if (Timeline[I]>Pv) then begin Pv:=Timeline[I]; Pn:=I; end; Add(Pn); end; begin Peaks:=0; Assign(F,'Bus.dat'); Reset(F); ReadLn(F,N); ActN:=N; for I := 0 to (N-1) do ReadLn(F,Data[I*2],Data[I*2+1]); Close(F); while (ActN>0) do begin ResetTimeline; CalcTimeline; ProcessTimeline; end; Assign(F,'Bus.sol'); Rewrite(F); WriteLn(F,Peaks); for I:=1 to Peaks do WriteLn(F,Peak[I],' ',Peak[I]+1); Close(F); end.