swap players with constraints