public boolean undo() {
        Debug.println("call: undo()", Debug.METHOD_CALL);
        if (history.isEmpty()) {
            return false;
        }
        Change c;
        while (true) {
            c = history.pop();
            switch (c.operation) {
                case Change.NORMAL: grid[c.x][c.y].fill(c.number); break;
                case Change.POSS_ADD: grid[c.x][c.y].poss().add(c.number); break;
                case Change.POSS_REM: grid[c.x][c.y].poss().remove(c.number); break;
            }
            if (c.last) {
                Debug.println("\treturn: " + c, Debug.METHOD_CALL);
                return true;
            }
        }
    }