def initialize_problem(self, row_domains, column_domains, constraints):
        rows = len(row_domains)
        columns = len(column_domains)
        self.guigrid = GUIGrid(self.width, self.height*2//3, rows, columns, self.screen)

        rowVIs = []
        for i in range(rows):
            v = VI((True,i), row_domains[i])
            rowVIs.append(v)
        colVIs = []
        for i in range(columns):
            v = VI((False,i), column_domains[i])
            v.neighbors = rowVIs
            colVIs.append(v)
        for vi in rowVIs:
            vi.neighbors = colVIs

        self.astarGAC = NonogramSolver(rowVIs + colVIs, row_domains + column_domains, constraints)
        self.currentState = self.astarGAC.search()

        self.screen.fill(self.WHITE)
        self.guigrid.reset()
        if self.currentState:
            for var in self.currentState.viList:
                var.drawColorsToGUI(self.guigrid)
        self.guigrid.draw()
        pygame.display.flip()
    def generateSucc(self, state):
        """ make a guess. start gussing value for variables with min. domain length"""
        succStates = []
        finishedVIs = []
        varsCopy = state.undecidedVariables.copy()

        if not len(varsCopy):
            return []

        otherVIs = sorted(varsCopy, key=lambda v: len(v.domain), reverse=True)
        betterVI = otherVIs.pop()

        if betterVI.domain:
            initID = betterVI.getID()
            for d in betterVI.domain:
                newVI = VI( initID, [d])
                newVI.neighbors = betterVI.neighbors.copy()
                successor = self.makeAssumption(newVI, state)

                succStates.append( self.gac.rerun(successor) )
            return succStates
        else:
            return []