2nd attempt at the algorithm
3rd attempt at the algorithm - addresses the cancelling of small holes in a big hole