# Write a program to print all permutations of a given string

A permutation, also called an “arrangement number” or “order,” is a rearrangement of the elements of an ordered list S into a one-to-one correspondence with S itself. A string of length n has n! permutation.
Source: Mathword(http://mathworld.wolfram.com/Permutation.html)

Below are the permutations of string ABC.
ABC ACB BAC BCA CBA CAB

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

Here is a solution that is used as a basis in backtracking.

 `// C++ program to print all  ` `// permutations with duplicates allowed  ` `#include ` `using` `namespace` `std; ` ` `  ` `  `// Function to print permutations of string  ` `// This function takes three parameters:  ` `// 1. String  ` `// 2. Starting index of the string  ` `// 3. Ending index of the string.  ` `void` `permute(string a, ``int` `l, ``int` `r)  ` `{  ` `    ``// Base case  ` `    ``if` `(l == r)  ` `        ``cout<

 `// C program to print all permutations with duplicates allowed ` `#include ` `#include ` ` `  `/* Function to swap values at two pointers */` `void` `swap(``char` `*x, ``char` `*y) ` `{ ` `    ``char` `temp; ` `    ``temp = *x; ` `    ``*x = *y; ` `    ``*y = temp; ` `} ` ` `  `/* Function to print permutations of string ` `   ``This function takes three parameters: ` `   ``1. String ` `   ``2. Starting index of the string ` `   ``3. Ending index of the string. */` `void` `permute(``char` `*a, ``int` `l, ``int` `r) ` `{ ` `   ``int` `i; ` `   ``if` `(l == r) ` `     ``printf``(``"%s\n"``, a); ` `   ``else` `   ``{ ` `       ``for` `(i = l; i <= r; i++) ` `       ``{ ` `          ``swap((a+l), (a+i)); ` `          ``permute(a, l+1, r); ` `          ``swap((a+l), (a+i)); ``//backtrack ` `       ``} ` `   ``} ` `} ` ` `  `/* Driver program to test above functions */` `int` `main() ` `{ ` `    ``char` `str[] = ``"ABC"``; ` `    ``int` `n = ``strlen``(str); ` `    ``permute(str, 0, n-1); ` `    ``return` `0; ` `} `

 `// Java program to print all permutations of a ` `// given string. ` `public` `class` `Permutation ` `{ ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``String str = ``"ABC"``; ` `        ``int` `n = str.length(); ` `        ``Permutation permutation = ``new` `Permutation(); ` `        ``permutation.permute(str, ``0``, n-``1``); ` `    ``} ` ` `  `    ``/** ` `     ``* permutation function ` `     ``* @param str string to calculate permutation for ` `     ``* @param l starting index ` `     ``* @param r end index ` `     ``*/` `    ``private` `void` `permute(String str, ``int` `l, ``int` `r) ` `    ``{ ` `        ``if` `(l == r) ` `            ``System.out.println(str); ` `        ``else` `        ``{ ` `            ``for` `(``int` `i = l; i <= r; i++) ` `            ``{ ` `                ``str = swap(str,l,i); ` `                ``permute(str, l+``1``, r); ` `                ``str = swap(str,l,i); ` `            ``} ` `        ``} ` `    ``} ` ` `  `    ``/** ` `     ``* Swap Characters at position ` `     ``* @param a string value ` `     ``* @param i position 1 ` `     ``* @param j position 2 ` `     ``* @return swapped string ` `     ``*/` `    ``public` `String swap(String a, ``int` `i, ``int` `j) ` `    ``{ ` `        ``char` `temp; ` `        ``char``[] charArray = a.toCharArray(); ` `        ``temp = charArray[i] ; ` `        ``charArray[i] = charArray[j]; ` `        ``charArray[j] = temp; ` `        ``return` `String.valueOf(charArray); ` `    ``} ` ` `  `} ` ` `  `// This code is contributed by Mihir Joshi `

 `# Python program to print all permutations with ` `# duplicates allowed ` ` `  `def` `toString(``List``): ` `    ``return` `''.join(``List``) ` ` `  `# Function to print permutations of string ` `# This function takes three parameters: ` `# 1. String ` `# 2. Starting index of the string ` `# 3. Ending index of the string. ` `def` `permute(a, l, r): ` `    ``if` `l``=``=``r: ` `        ``print` `toString(a) ` `    ``else``: ` `        ``for` `i ``in` `xrange``(l,r``+``1``): ` `            ``a[l], a[i] ``=` `a[i], a[l] ` `            ``permute(a, l``+``1``, r) ` `            ``a[l], a[i] ``=` `a[i], a[l] ``# backtrack ` ` `  `# Driver program to test the above function ` `string ``=` `"ABC"` `n ``=` `len``(string) ` `a ``=` `list``(string) ` `permute(a, ``0``, n``-``1``) ` ` `  `# This code is contributed by Bhavya Jain `

 `// C# program to print all  ` `// permutations of a given string. ` `using` `System; ` ` `  `class` `GFG ` `{ ` `    ``/** ` `    ``* permutation function ` `    ``* @param str string to  ` `       ``calculate permutation for ` `    ``* @param l starting index ` `    ``* @param r end index ` `    ``*/` `    ``private` `static` `void` `permute(String str, ` `                                ``int` `l, ``int` `r) ` `    ``{ ` `        ``if` `(l == r) ` `            ``Console.WriteLine(str); ` `        ``else` `        ``{ ` `            ``for` `(``int` `i = l; i <= r; i++) ` `            ``{ ` `                ``str = swap(str, l, i); ` `                ``permute(str, l + 1, r); ` `                ``str = swap(str, l, i); ` `            ``} ` `        ``} ` `    ``} ` ` `  `    ``/** ` `    ``* Swap Characters at position ` `    ``* @param a string value ` `    ``* @param i position 1 ` `    ``* @param j position 2 ` `    ``* @return swapped string ` `    ``*/` `    ``public` `static` `String swap(String a,  ` `                              ``int` `i, ``int` `j) ` `    ``{ ` `        ``char` `temp; ` `        ``char``[] charArray = a.ToCharArray(); ` `        ``temp = charArray[i] ; ` `        ``charArray[i] = charArray[j]; ` `        ``charArray[j] = temp; ` `        ``string` `s = ``new` `string``(charArray); ` `        ``return` `s; ` `    ``} ` ` `  `// Driver Code ` `public` `static` `void` `Main() ` `{ ` `    ``String str = ``"ABC"``; ` `    ``int` `n = str.Length; ` `    ``permute(str, 0, n-1); ` `} ` `} ` ` `  `// This code is contributed by mits `

 ` `

Output:

```ABC
ACB
BAC
BCA
CBA
CAB```