Thanks, Phatfingers,
-Yes, this dataset fails.
-Yes, I think you did the swaps inaccurately, at a one-off location, but it fails according to (my interpretation of ) my instructions, as well.
-No, the attempt wasn't foiled by having no way of knowing where the other number was living--P1 gets to see exactly half, which means P1 (actually us, as the puppeteers) knows exactly what's in the other half, and exactly where they will go once P2 has sorted them.
The problem is, at this point, we're doing software-level bookkeeping (let's see, should that be (C+1/2) or (1+C/2)?) without my actually writing and testing the code. I apologize for that.
I'll do the code and get it right (RSN), but here is the main fact, which I suspect can be agreed upon without my specifying the precise locations: