is there a somewhat elegant way to route 8 audio outputs (from readsf~) to 8 dac~ outputs randomly (on a bang for example)?

i.e. out1 to dac4, out2 to dac7 etc.

each output is allowed to one dac~ channel only.

mathematically speaking that would be 8! 8x7x6x5x4x3x2x1 (40320) possibilites, but i don’t see an easy way to program this in puredata.

some way of dynamic patching maybe? or a throw~ and catch~ approach? i get stuck on the random logic, since every “step” that chooses a destinations changes the subsequent outputs that are still allowed to be chosen.