Skip to content
Related Articles

Related Articles

Improve Article

Find the good permutation of first N natural numbers

  • Difficulty Level : Basic
  • Last Updated : 12 Apr, 2021

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 <bits/stdc++.h>
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




<?phP
// PHP implementation of the approach
 
// Function to print the good permutation
// of first N natural numbers
function printPermutation($n)
{
    // If n is odd
    if ($n % 2 != 0)
    {
        echo("-1");
    }
 
    // Otherwise
    else
        for ($i = 1; $i <= $n / 2; $i++)
        {
            echo(2 * $i . " " .
               ((2 * $i) - 1) . " ");
        }
         
    return $n;
}
 
// Driver code
$n = 4;
printPermutation($n);
 
// This code contributed
// by Code_Mech.
?>

Javascript




<script>
 
// Javascript implementation of the approach
 
// Function to print the good permutation
// of first N natural numbers
function printPermutation(n)
{
    // If n is odd
    if (n % 2 != 0)
        document.write(-1);
 
    // Otherwise
    else
        for (let i = 1; i <= Math.floor(n / 2); i++)
            document.write((2 * i) + " " + ((2 * i) - 1) + " ");
}
 
// Driver code
    let n = 4;
    printPermutation(n);
     
//This code is contributed by Manoj
</script>
Output: 
2 1 4 3

 




My Personal Notes arrow_drop_up
Recommended Articles
Page :