block swap algo