// Задача "Циклический класс"
// 10-ая Интернет-олимпиада сезона 2007-2008, базовый уровень
// Автор задачи: Федор Царев, tsarev@rain.ifmo.ru
// Автор решения: Сергей Поромов, poromov@rain.ifmo.ru

var
  n, m, i, j, l, t : longint;
  ans, p : array[1..1000] of longint;
  a : array[1..1000] of boolean;

begin
  reset(input, 'cyclic.in');
  rewrite(output, 'cyclic.out');
  read(n);
  for i := 1 to n do
    read(p[i]);

  m := 0;
  for i := 1 to n do
    if not(a[i]) then begin
      l := 1;
      j := i;
      a[i] := true;
      while (p[j] <> i) do begin
        j := p[j];
        a[j] := true;
        l := l + 1;
      end;
      m := m + 1;
      ans[m] := l;
    end;

  for i := 1 to m do
    for j := i + 1 to m do
      if (ans[i] > ans[j]) then begin
         t := ans[i];
         ans[i] := ans[j];
         ans[j] := t;
      end;
  writeln(m);
  for i := 1 to m do
    write(ans[i], ' ');
end.