# Generate all cyclic permutations of a number

Given a number N, our task is to generate all the possible cyclic permutations of the number.

A cyclic permutation shifts all the elements of a set by a fixed offset. For a set with elements , , …, , a cyclic permutation of one place to the left would yield , …, , , and a cyclic permutation of one place to the right would yield , , , ….

Examples:

```Input :  123
Output : 123
312
231

Input :  5674
Output : 5674
4567
7456
6745
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

The idea is to generate next permutation of a number using below formula.

```    rem = num % 10;
div = num / 10;
num = (pow(10, n - 1)) * rem + div;
```

While repeating above steps, if we come back to original number, we stop and return.

## C++

 `// Program to generate all cyclic permutations ` `// of number ` `#include ` `using` `namespace` `std; ` ` `  `// Function to count the total number of digits  ` `// in a number. ` `int` `countdigits(``int` `N) ` `{ ` `    ``int` `count = 0; ` `    ``while` `(N) { ` `        ``count++; ` `        ``N = N / 10; ` `    ``} ` `    ``return` `count; ` `} ` ` `  `// Function to generate all cyclic permutations ` `// of a number ` `void` `cyclic(``int` `N) ` `{ ` `    ``int` `num = N; ` `    ``int` `n = countdigits(N); ` ` `  `    ``while` `(1) { ` `        ``cout << num << endl; ` ` `  `        ``// Following three lines generates a ` `        ``// circular pirmutation of a number. ` `        ``int` `rem = num % 10; ` `        ``int` `div` `= num / 10; ` `        ``num = (``pow``(10, n - 1)) * rem + ``div``; ` ` `  `        ``// If all the permutations are checked ` `        ``// and we obtain original number exit ` `        ``// from loop. ` `        ``if` `(num == N)  ` `            ``break``;         ` `    ``} ` `} ` ` `  `// Driver Program ` `int` `main() ` `{ ` `    ``int` `N = 5674; ` `    ``cyclic(N); ` `    ``return` `0; ` `} `

## Java

 `// Java Program to generate all  ` `// cyclic permutations of number ` `class` `GFG ` `{ ` ` `  `    ``// Function to count the total number ` `    ``// of digits in a number. ` `    ``static` `int` `countdigits(``int` `N) ` `    ``{ ` `        ``int` `count = ``0``; ` `        ``while` `(N>``0``) { ` `            ``count++; ` `            ``N = N / ``10``; ` `        ``} ` `        ``return` `count; ` `    ``} ` ` `  `    ``// Function to generate all cyclic ` `    ``// permutations of a number ` `    ``static` `void` `cyclic(``int` `N) ` `    ``{ ` `        ``int` `num = N; ` `        ``int` `n = countdigits(N); ` ` `  `        ``while` `(``true``) { ` `            ``System.out.println(num);  ` ` `  `            ``// Following three lines generates a ` `            ``// circular pirmutation of a number. ` `            ``int` `rem = num % ``10``; ` `            ``int` `dev = num / ``10``; ` `            ``num = (``int``)((Math.pow(``10``, n - ``1``)) * ` `                                ``rem + dev); ` ` `  `            ``// If all the permutations are  ` `            ``// checked and we obtain original ` `            ``// number exit from loop. ` `            ``if` `(num == N)  ` `                ``break``;  ` `        ``} ` `    ``} ` ` `  `    ``// Driver Program ` `    ``public` `static` `void` `main (String[] args) { ` `    ``int` `N = ``5674``; ` `    ``cyclic(N); ` `    ``} ` `} ` ` `  `/* This code is contributed by Mr. Somesh Awasthi */`

## Python3

 `# Python3 Program to  ` `# generate all cyclic ` `# permutations of number ` `import` `math ` ` `  `# Function to count the  ` `# total number of digits ` `# in a number. ` `def` `countdigits(N): ` `    ``count ``=` `0``; ` `    ``while` `(N): ` `        ``count ``=` `count ``+` `1``; ` `        ``N ``=` `int``(math.floor(N ``/` `10``)); ` `    ``return` `count; ` `     `  `# Function to generate  ` `# all cyclic permutations ` `# of a number ` `def` `cyclic(N): ` `    ``num ``=` `N; ` `    ``n ``=` `countdigits(N); ` `    ``while` `(``1``): ` `        ``print``(``int``(num)); ` `         `  `        ``# Following three lines  ` `        ``# generates a circular  ` `        ``# permutation of a number. ` `        ``rem ``=` `num ``%` `10``; ` `        ``div ``=` `math.floor(num ``/` `10``); ` `        ``num ``=` `((math.``pow``(``10``, n ``-` `1``)) ``*`  `                           ``rem ``+` `div); ` `         `  `        ``# If all the permutations  ` `        ``# are checked and we obtain  ` `        ``# original number exit from loop. ` `        ``if` `(num ``=``=` `N): ` `            ``break``;  ` `             `  `# Driver Code ` `N ``=` `5674``; ` `cyclic(N); ` ` `  `# This code is contributed by mits `

## C#

 `// C# Program to generate all  ` `// cyclic permutations of number ` `using` `System; ` ` `  `class` `GFG ` `{ ` `    ``// Function to count the total number ` `    ``// of digits in a number. ` `    ``static` `int` `countdigits(``int` `N) ` `    ``{ ` `        ``int` `count = 0; ` `        ``while` `(N > 0) { ` `            ``count++; ` `            ``N = N / 10; ` `        ``} ` `        ``return` `count; ` `    ``} ` ` `  `    ``// Function to generate all cyclic ` `    ``// permutations of a number ` `    ``static` `void` `cyclic(``int` `N) ` `    ``{ ` `        ``int` `num = N; ` `        ``int` `n = countdigits(N); ` ` `  `        ``while` `(``true``) { ` `            ``Console.WriteLine(num);  ` ` `  `            ``// Following three lines generates a ` `            ``// circular permutation of a number. ` `            ``int` `rem = num % 10; ` `            ``int` `dev = num / 10; ` `            ``num = (``int``)((Math.Pow(10, n - 1)) * ` `                                    ``rem + dev); ` ` `  `            ``// If all the permutations are  ` `            ``// checked and we obtain original ` `            ``// number exit from loop. ` `            ``if` `(num == N)  ` `                ``break``;  ` `        ``} ` `    ``} ` ` `  `    ``// Driver Program ` `    ``public` `static` `void` `Main ()  ` `    ``{ ` `      ``int` `N = 5674; ` `      ``cyclic(N); ` `    ``} ` `} ` ` `  `// This code is contributed by nitin mittal `

## PHP

 ` `

Output:

``` 5674
4567
7456
6745
```

This article is contributed by Vineet Joshi. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.