#include #include void print_perm(int* x, int n); void procedure_gc(int* x, int* y, int* d, int n); int main() { int n,i; int* x; int* y; int* d; scanf("%d", &n); x = malloc(sizeof(int)*n); if(x == NULL) exit(EXIT_FAILURE); y = malloc(sizeof(int)*n); if(y == NULL) exit(EXIT_FAILURE); d = malloc(sizeof(int)*n); if(d == NULL) exit(EXIT_FAILURE); for(i=0; i=-1; --t) { if(t==-1) return; i = y[t]; if(i!=0) { if(d[t] < 0 && x[i-1] < t) { u = x[i-1]; y[t] = i-1; y[u] = i; x[i-1] = t; x[i] = u; break; } } if(i!=n-1) { if(d[t] > 0 && x[i+1] < t) { u = x[i+1]; y[t] = i+1; y[u] = i; x[i+1] = t; x[i] = u; break; } } d[t] *= -1; } } return; } void print_perm(int* x, int n) { int i; for(i=0; i