build new states on move; implement heuristic