# Find the good permutation of first N natural numbers

• Difficulty Level : Basic
• Last Updated : 09 Jun, 2022

Given an integer N, the task is to print a good permutation of first N natural numbers. Let’s denote the ith element of the permutation be pi
A good permutation is a permutation such that for all 1 ≤ i ≤ N the following equations hold true,

• ppi = i
• pi != i

Basically above expressions mean, no value is equal to its position.
If no such good permutation exists then print -1.
Examples:

Input: N = 1
Output: -1
No good permutation exists.
Input: N = 2
Output: 2 1
Position of 2 is 1 and position of 1 is 2.

Approach: Consider permutation p such that pi = i. Actually, p is a sequence of numbers from 1 to N and ppi = i
Now the only trick is to change the permutation to satisfy the second equation i.e. pi != i. Let’s swap every two consecutive elements. More formally, for each k: 2k ≤ n let’s swap p2k – 1 and p2k. It’s easy to see that the obtained permutation satisfies both the equations for every n with the only exception: when n is odd, there is no answer and we should print -1.
Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;` `// Function to print the good permutation``// of first N natural numbers``int` `printPermutation(``int` `n)``{``    ``// If n is odd``    ``if` `(n % 2 != 0)``        ``cout << -1;` `    ``// Otherwise``    ``else``        ``for` `(``int` `i = 1; i <= n / 2; i++)``            ``cout << 2 * i << ``" "` `<< 2 * i - 1 << ``" "``;``}` `// Driver code``int` `main()``{``    ``int` `n = 4;``    ``printPermutation(n);` `    ``return` `0;``}`

## Java

 `// Java implementation of the approach` `class` `GFG``{` `// Function to print the good permutation``// of first N natural numbers``static` `int` `printPermutation(``int` `n)``{``    ``// If n is odd``    ``if` `(n % ``2` `!= ``0``)``    ``{``        ``System.out.println(``"-1"``);``    ``}` `    ``// Otherwise``    ``else``        ``for` `(``int` `i = ``1``; i <= n / ``2``; i++)``        ``{``            ``System.out.print(``2` `* i + ``" "` `+ ((``2` `* i) - ``1``) + ``" "``);``        ``}``        ` `    ``return` `n;``    ` `}` `// Driver code``public` `static` `void` `main(String []args)``{``    ``int` `n = ``4``;``    ``printPermutation(n);``}``}` `// This code contributed by Rajput-Ji`

## Python3

 `# Python3 implementation of the approach` `# Function to print the good permutation``# of first N natural numbers``def` `printPermutation(n):``    ` `    ``# If n is odd``    ``if` `(n ``%` `2` `!``=` `0``):``        ``print``(``-``1``);` `    ``# Otherwise``    ``else``:``        ``for` `i ``in` `range``(``1``, (n ``/``/` `2``) ``+` `1``):``            ``print``((``2` `*` `i), (``2` `*` `i ``-` `1``), end ``=` `" "``);` `# Driver code``n ``=` `4``;``printPermutation(n);` `# This code is contributed by mits`

## C#

 `// C# implementation of the approach``using` `System;` `class` `GFG {` `// Function to print the good permutation``// of first N natural numbers``static` `int` `printPermutation(``int` `n)``{``    ``// If n is odd``    ``if` `(n % 2 != 0)``    ``{``        ``Console.WriteLine(``"-1"``);``    ``}` `    ``// Otherwise``    ``else``        ``for` `(``int` `i = 1; i <= n / 2; i++)``        ``{``            ``Console.WriteLine(2 * i + ``" "` `+ ((2 * i) - 1) + ``" "``);``        ``}``        ` `    ``return` `n;``    ` `}` `// Driver code``public` `static` `void` `Main(String []args)``{``    ``int` `n = 4;``    ``printPermutation(n);``}``}` `// This code is contributed by Kirti_Mangal`

## PHP

 ``

## Javascript

 ``

Output:

`2 1 4 3`

Time Complexity: O(n)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up