int cyklicky(int x, int N) { if (x>N) return x-N; return x; } void prejmenuj(vector &A, int stare, int nove) { for (int n=1; n < int(A.size()); n++) { if (stare < nove && A[n] > stare && A[n] <= nove) A[n]--; if (stare > nove && A[n] >= nove && A[n] < stare) A[n]++; } } void opacna_permutace(vector &A) { int N = A.size(); int old = A[0]; A[0] = cyklicky(A[0] + N/2, N); prejmenuj(A, old, A[0]); if (N % 2 == 0) return; int velke = (N+1)/2 + (A[0] <= N/2); if (A[1] >= velke) { old = A[0]; A[0] = cyklicky(A[0] + 1, N); prejmenuj(A, old, A[0]); } prejmenuj(A, A[0], N); vector B(A.begin()+1, A.end()); opacna_permutace(B); for (int n=1; n