You have a 1 in the 100's column, a 2 in the 10's column, and a 3 in the 1's column.

So you could look to swap the columns:

1 2 3
X
1 3 2
X
3 1 2
X
3 2 1
X
2 3 1
X
2 1 3

Another way to look at it (less efficient, but simpler in concept perhaps), is to make your set of {1,2,3} into an odometer on a car.

Think of it as having three wheels, and on these odometer wheels, we have only 3 digits that they can show - either 1, 2, or 3.

| 1 | 2 | 3 |

now move the odometer wheels, like the car was running down the road:

| 1 | 2 | 4 | <== can't show a 4, so this wheel becomes a 1
| 1 | 3 | 1 | <== middle wheel is incremented, but we can't have 2 1's
| 1 | 3 | 2 | <== got the next combination

continue incrementing in this way ALWAYS working from the right most "wheel", then the middle wheel, then the left most wheel, just like a real odometer would. Set up your logic, so only the digits one two or three can be valid, and only one of each digit can valid.
This can work out well with recursion or nested for loops. The left wheel is the outermost for loop, the middle wheel is the middle for loop, and the right most wheel is the innermost for loop.

I am trying to understand the SynchronizedMap and I ran the below code. I get the below Output with an exception. According to my understanding the exception is caused when ...

So, the title may seem confusing so hopefully I am able to explain myself better via the thread body. I am developing an application for a friend that wants to ...