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

Код:
program PKU1147;
const maxn = 3010;
type integer = longint;

var a, next: array[1 .. maxn] of integer;
    s: array[0 .. 1] of integer;
    n, i, j, u, v, k: integer;

begin
  read(n);
  s[0] := 0; s[1] := 0;
  for i := 1 to n do begin
    read(a[i]);
    inc(s[a[i]]);
  end;
  u := s[0]; v := 0;
  for i := 1 to n do
  if a[i] = 1 then begin
    u := u + 1;
    next[u] := i;
  end else begin
    v := v + 1;
    next[v] := i;
  end;
  k := 0;
  while k < n do begin
    u := 1;
    repeat
      u := next[u];
      k := k + 1;
      write(a[u], ' ');
    until u = 1;
  end;
  writeln;
end.