more refactoring of run method, not currently returning valid adjacent coordinates in second run