'Builds the different possibilities.'

def _possib(self, generat, constr=None):

    if (constr is None):
        constr = []
    pos = len(constr)
    if (not generat[pos]):
        (yield None)
    for elem in generat[pos]:
        if ((pos + 1) == len(generat)):
            (yield (constr + [elem]))
        else:
            for val in self._possib(generat, (constr + [elem])):
                (yield val)
