# Immediate smallest number after re-arranging the digits of a given number

Given a number print the immediate smallest number formed by re-arranging the digits of a given number.
Print “Not Possible” if it is not possible to get the smallest number.

Examples:

Input : n = 1234
Output : Not Possible

Input : n = 3544
Output : 3454

Input : n = 2536
Output : 2356

This problem is a variation of this article. In this article we have to find the immediate smallest number, So idea is to traverse the number from last and if we find ith digit greater than (i+1)th digit, then swap them and print the number else keep on finding the pair. If not found then print “Not Possible” at last.

Below is the implementation of above approach :

## C++

 `// C++ program for immediate smallest number ` `// after re-arranging the digits of a given number ` ` `  `#include ` `using` `namespace` `std; ` ` `  `void` `immediateSmallest(string s) ` `{ ` ` `  `    ``// Find the last digit which is greater ` `    ``// than previous digit and swap it with ` `    ``// previous digit ` `    ``int` `l = s.size(); ` `    ``for` `(``int` `i = l - 1; i > 0; i--) { ` `        ``if` `(s[i] < s[i - 1]) { ` `            ``swap(s[i], s[i - 1]); ` `            ``cout << s; ` `            ``return``; ` `        ``} ` `    ``} ` ` `  `    ``cout << ``"Not Possible\n"``; ` `} ` ` `  `int` `main() ` `{ ` `    ``int` `n = 3532; ` `    ``string s = to_string(n); ` `    ``immediateSmallest(s); ` `} `

## Java

 `// Java program for immediate smallest number ` `// after re-arranging the digits of a given number ` ` `  `class` `GfG { ` ` `  `static` `void` `immediateSmallest(String s)  ` `{ ``char` `temp  = ``'g'``; ` ` `  `    ``// Find the last digit which is greater  ` `    ``// than previous digit and swap it with  ` `    ``// previous digit  ` `    ``int` `l = s.length(); ` `    ``char` `ch[] = s.toCharArray(); ` `    ``for` `(``int` `i = l - ``1``; i > ``0``; i--) {  ` `        ``if` `(ch[i] < ch[i - ``1``]) {  ` `            ``temp = ch[i]; ` `            ``ch[i] = ch[ i - ``1``]; ` `            ``ch[i - ``1``] = temp; ` `            ``String s1 = ``new` `String(ch); ` `            ``System.out.println(s1);  ` `            ``return``;  ` `        ``}  ` `    ``}  ` ` `  `    ``System.out.println(``"Not Possible"``);  ` `}  ` ` `  `public` `static` `void` `main(String[] args)  ` `{  ` `    ``int` `n = ``3532``;  ` `    ``String s = Integer.toString(n);  ` `    ``immediateSmallest(s);  ` `}  ` `} `

## Python3

# Python3 program for immediate smallest
# number after re-arranging the
# digits of a given number

def immediateSmallest(str):
temp = “g”
s = list(str)

# Find the last digit which is
# greater han previous digit
# and swap it with previous digit
l = len(s)
for i in range(l – 1, 0, -1):
if (s[i] < s[i - 1]): temp = s[i] s[i] = s[ i - 1] s[i - 1] = temp print(''.join(s)) return print("Not Possible") # Driver Code n = 3532 s = str(3532) immediateSmallest(s) # This code is contributed by Rajput-Ji [tabby title="C#"]

 `// C# program for immediate smallest ` `// number after re-arranging the  ` `// digits of a given number ` `class` `GFG ` `{ ` ` `  `static` `void` `immediateSmallest(``string` `s)  ` `{  ` `    ``char` `temp = ``'g'``; ` ` `  `    ``// Find the last digit which is   ` `    ``// greater han previous digit   ` `    ``// and swap it with previous digit  ` `    ``int` `l = s.Length; ` `    ``char``[] ch = s.ToCharArray(); ` `    ``for` `(``int` `i = l - 1; i > 0; i--) ` `    ``{  ` `        ``if` `(ch[i] < ch[i - 1]) ` `        ``{  ` `            ``temp = ch[i]; ` `            ``ch[i] = ch[ i - 1]; ` `            ``ch[i - 1] = temp; ` `            ``string` `s1 = ``new` `string``(ch); ` `            ``System.Console.WriteLine(s1);  ` `            ``return``;  ` `        ``}  ` `    ``}  ` ` `  `    ``System.Console.WriteLine(``"Not Possible"``);  ` `}  ` ` `  `// Driver Code ` `static` `void` `Main()  ` `{  ` `    ``int` `n = 3532;  ` `    ``string` `s = System.Convert.ToString(n);  ` `    ``immediateSmallest(s);  ` `}  ` `} ` ` `  `// This code is contributed by mits `

## PHP

 ` 0; ``\$i``--) ` `    ``{  ` `        ``if` `(``\$s``[``\$i``] < ``\$s``[``\$i` `- 1]) ` `        ``{  ` `            ``\$temp` `= ``\$s``[``\$i``]; ` `            ``\$s``[``\$i``] = ``\$s``[ ``\$i` `- 1]; ` `            ``\$s``[``\$i` `- 1] = ``\$temp``; ` `            ``print``(``\$s``);  ` `            ``return``;  ` `        ``}  ` `    ``}  ` ` `  `    ``print``(``"Not Possible"``);  ` `}  ` ` `  `// Driver Code ` `\$n` `= 3532;  ` `\$s` `= ``strval``(``\$n``);  ` `immediateSmallest(``\$s``);  ` ` `  `// This code is contributed by mits ` `?> `

Output:

```3523
```

My Personal Notes arrow_drop_up