Christmas is coming: it is time to determine who is going to make a gift to whom. I'm looking for such an algorithm. 

Taking a list `(1 to 10)` for instance, create random pairs ensuring that:

* everybody item is associated to another item;
* none of the items is associated to itself;
* every item is associated once and only once.

So obviously, a simple shuffle is not enough:

```
Random.shuffle(1 to 10)
  .toSeq
  .zipWithIndex

```

Eg:

```
1 -> 2
2 -> 4
3 -> 1
4 -> 3

```

But not (`1` makes a gift to itself):

```
1 -> 1
2 -> 3
3 -> 4
4 -> 2

```

I've been thinking to constraints on an HList but:

* I haven't been able to express it
* It might be a bit overkill (even if it is funny)
* There might be algorithms that ensure that "by construction"