Anti-Fibonacci Permutation (Codeforces 1644B)
Tags: Others, brute force

Let's call a permutation $$$p$$$ of length $$$n$$$ anti-Fibonacci if the condition $$$p_{i-2} + p_{i-1} \ne p_i$$$ holds for all $$$i$$$ ($$$3 \le i \le n$$$). Recall that the permutation is the array of length $$$n$$$ which contains each integer from $$$1$$$ to $$$n$$$ exactly once.Your task is for a given number $$$n$$$ print $$$n$$$ distinct anti-Fibonacci permutations of length $$$n$$$.

Input: The first line contains a single integer $$$t$$$ ($$$1 \le t \le 48$$$) — the number of test cases. The single line of each test case contains a single integer $$$n$$$ ($$$3 \le n \le 50$$$).

Output: For each test case, print $$$n$$$ lines. Each line should contain an anti-Fibonacci permutation of length $$$n$$$. In each test case, you cannot print any permutation more than once.If there are multiple answers, print any of them. It can be shown that it is always possible to find $$$n$$$ different anti-Fibonacci permutations of size $$$n$$$ under the constraints of the problem.


Sample Inputs:
2
4
3

Sample Outputs:
4 1 3 2
1 2 4 3
3 4 1 2
2 4 1 3
3 2 1
1 3 2
3 1 2

Solution (Python):
""""""

def i():
    n = int(input())
    if n == 3:
        print('3 2 1\n2 3 1\n1 3 2\n')
        return
    s = [str(x) for x in range(2, n + 1)]
    c = [' '.join(s[::-1])]
    for x in range(n - 1):
        c.append(' '.join(s[x:] + s[:x]))
    print(' 1\n'.join(c), end=' 1\n')
    return
t = int(input())
for _ in range(t):
    i()

Solution (Python):
t = int(input())
result = []
for i in range(t):
    n = int(input())
    if n == 3:
        result.append('3 2 1')
        result.append('3 1 2')
        result.append('1 3 2')
    else:
        array = [str(j) for j in range(n, 0, -1)]
        result.append(' '.join(array))
        for j in range(n - 1):
            array.insert(0, array[n - 1])
            del array[n]
            result.append(' '.join(array))
for i in result:
    print(i)

Solution (Python):
T = int(input())
for _ in range(T):
    n = int(input())
    ans = [str(i) for i in range(n, 0, -1)]
    print(' '.join(ans))
    for i in range(n - 1):
        (ans[i], ans[i + 1]) = (ans[i + 1], ans[i])
        print(' '.join(ans))
        (ans[i], ans[i + 1]) = (ans[i + 1], ans[i])