Есть вот такая задача:
Цитата
Напишите программу для определения при разных значениях n числа перестановок PI=(pi 1,pi 2,…,pi n) на множестве {1,2,…n}, которые обладают тем свойством, что из pi i- i = pi j-j (mod n) следует i=j.

Я не совсем понимаю как реализовать условие, и что должно получиться.
Подскажите, пожалуйста, решение.
Вот такие наработки:
Код

{ программа генерации перестановок N элементного
  множества в лексикографическом порядке }

Program perms;
var
  i, j, h, n, k, x, y: integer;
  a:array[0 .. 100] of integer;  { массив для хранения перестановки }

{процедура вывода полученной перестановки}
procedure output;
var i: integer;
begin
  writeln;
  for i:=1 to n do write(a[i],' ');
end;

begin
  write('количество элементов перестановки: '); readln(n);
  fillchar(a, sizeof(a), 0);

  { ввод элементов начальной перестановки }
  for i:=1 to n do a[i]:=i;
  i:=n;
  j:=i;
  repeat

//здесь пытаюсь проверить условие (не уверена, что оно вообще здесь должно быть)

  
    x:= a[i]-i;
    y:=a[j]-j mod n;
    if (x=y) and (i=j) then

    output;  { вывод текущей перестановки }
    i:=n;
    while a[i-1]>a[i] do dec(i); { поиск скачка }
    j:=i-1;
    h:=a[j];
    while a[i+1]>h do inc(i); { поиск первого меньшего элемента }
    a[j]:=a[i];  a[i]:=h;
    i:=j+1; k:=n;
    while i<k do begin { перестановка ”хвоста” }
       h:=a[i]; a[i]:=a[k]; a[k]:=h;
       inc(i); dec(k)              
    end
  until j=0;
end.

Заранее большое спасибо!