isFull() was still not giving correct answers sometimes as all bottom squares are connected to virtual bottom, so bottom squares may sometimes still be seen as connected to top through virtual bottom. Fixed by maintaining two UFs, with and without the virtual bottom, to be used for different purposes when checking if site full against whether system percolates - possibly better way to do this without maintaining two but can't think of one right now.