Convert the elements to a canonical representation. This allows you use a set data structure or similar to identify duplicates.

I'm assuming here you're trying to find permutations that do not result in one of the elements remaining in place, i.e. for values `{ a, b, c}`

the matching permutations would be

```
{ a, b, c }
{ b, c, a }
{ c, a, b }
```

Furthermore I'm assuming even if multiple values are the same, they could be considered as listed in any order, i.e. `{ 1, 1, 2 }`

would match `{ 1, 2, 1 }`

even though the first element remains equal, since we could consider the first element to be the second one in the original.

This allows us use the lexicographically minimal alternative that as the canonical representation.

The following code uses `std::array`

for convenience.

```
#include
#include
#include
```