Special Permutation (Codeforces 1352G)
Tags: Others, constructive algorithms

A permutation of length $$$n$$$ is an array $$$p=[p_1,p_2,\dots,p_n]$$$, which contains every integer from $$$1$$$ to $$$n$$$ (inclusive) and, moreover, each number appears exactly once. For example, $$$p=[3,1,4,2,5]$$$ is a permutation of length $$$5$$$.For a given number $$$n$$$ ($$$n \ge 2$$$), find a permutation $$$p$$$ in which absolute difference (that is, the absolute value of difference) of any two neighboring (adjacent) elements is between $$$2$$$ and $$$4$$$, inclusive. Formally, find such permutation $$$p$$$ that $$$2 \le |p_i - p_{i+1}| \le 4$$$ for each $$$i$$$ ($$$1 \le i < n$$$).Print any such permutation for the given integer $$$n$$$ or determine that it does not exist.

Input: The first line contains an integer $$$t$$$ ($$$1 \le t \le 100$$$) — the number of test cases in the input. Then $$$t$$$ test cases follow.Each test case is described by a single line containing an integer $$$n$$$ ($$$2 \le n \le 1000$$$).

Output: Print $$$t$$$ lines. Print a permutation that meets the given requirements. If there are several such permutations, then print any of them. If no such permutation exists, print -1.


Sample Inputs:
6
10
2
4
6
7
13

Sample Outputs:
9 6 10 8 4 7 3 1 5 2 
-1
3 1 4 2 
5 3 6 2 4 1 
5 1 3 6 2 4 7 
13 9 7 11 8 4 1 3 5 2 6 10 12

Solution (Python):
def permutations(num: int):
    if num < 4:
        return '-1'
    if num == 4:
        return '3 1 4 2'
    else:
        even = list()
        odd = list()
        for i in range(1, num + 1, 2):
            odd.append(i)
        for i in range(2, num + 1, 2):
            even.append(i)
        even.reverse()
        if num % 2 == 0:
            (even[1], even[2]) = (even[2], even[1])
        (even[0], even[1]) = (even[1], even[0])
        return ' '.join(map(str, odd + even))
quant = int(input())
inputs = list()
for i in range(quant):
    inputs.append(int(input()))
for i in inputs:
    print(permutations(i))

Solution (Python):
def main():
    T = int(input())
    while T > 0:
        T -= 1
        n = int(input())
        if n <= 3:
            print('-1')
            continue
        q = [0] * (n + 1)
        k = 1
        for i in range(1, n + 1, 2):
            q[k] = i
            k += 1
        for i in range(n - n % 2, 0, -2):
            q[k] = i
            k += 1
        if n % 2 == 0:
            (q[n // 2], q[n // 2 - 1]) = (q[n // 2 - 1], q[n // 2])
        else:
            (q[n // 2 + 2], q[n // 2 + 3]) = (q[n // 2 + 3], q[n // 2 + 2])
        print(' '.join((str(x) for x in q[1:n + 1])))
if __name__ == '__main__':
    main()

Solution (Python):
import sys
sys.setrecursionlimit(1000000000)
for _ in range(int(input())):
    n = int(input())
    if n < 4:
        print(-1)
        continue
    res = [n for n in range(1, n + 1, 2)]
    evens = [n for n in range(2, n + 1, 2)]
    res = evens[2:][::-1] + evens[:2] + res
    print(' '.join(map(str, res)))