public Status solve() {
        Object solved = this.solvedCopy();
        if (solved.getClass() != Grid.class) {
            return (Status) solved;
        }
        
        history.add(Change.marker());
        for (int i = 0; i < size*size; i++) {
            for (int j = 0; j < size*size; j++) {
                if (grid[i][j].value() == 0) {
                    grid[i][j].fill(((Grid) solved).grid[i][j].value());
                    history.add(new Change(i, j, 0, Change.NORMAL, false));
                    if (autoPossBasic) {
                        for (int n : grid[i][j].poss()) {
                            grid[i][j].poss().remove(n);
                            history.add(new Change(i, j, n, Change.POSS_ADD, false));
                        }
                    }
                }
            }
        }
            
        return Status.SOLVED;
    }