compacting algorithm