http://acm.pku.edu.cn/JudgeOnline/problem?id=1089

Код:
program PKU1089;
{$I-,S-,Q-,R-}

const maxn = 1000010;

type integer = longint;

var a: array[1..maxn] of integer;
    x: array[1..maxn] of boolean;
    n: integer;

procedure prepare;
var u, v, i: integer;
begin
  fillchar(x, sizeof(x), false);
  fillchar(a, sizeof(a), 0);
  readln(n);
  for i := 1 to n do begin
    read(u, v);
    inc(a[u]); dec(a[v]);
    x[u] := true;
    x[v] := true;
  end;
end;

procedure main;
var now, i, j: integer;
begin
  i := 1; now := 0;
  while i < maxn do begin
    now := now + a[i];
    if now = 0 then begin
      if x[i] then writeln(i, ' ', i);
      i := i + 1;
    end else begin
      j := i;
      while now > 0 do begin
        j := j + 1;
        now := now + a[j];
      end;
      writeln(i, ' ', j);
      i := j + 1;
    end;
  end;
end;

begin
  prepare;
  main;
end.