Now we will confect a reagent. There are eight materials to choose from, numbered 1,2,..., 8 respectively.

We know the rules of confect:
```
material1 and material2 cannot be selected at the same time
material3 and material4 cannot be selected at the same time
material5 and material6 must be selected at the same time
material7 or  material8 must be selected(at least one, or both)
```

# Task

You are given a integer array `formula`. Array contains only digits 1-8 that represents material 1-8. Your task is to determine if the formula is valid. Returns `true` if it's valid, `false` otherwise.


# Example

For `formula = [1,3,7]`, The output should be `true`.

For `formula = [7,1,2,3]`, The output should be `false`.

For `formula = [1,3,5,7]`, The output should be `false`.

For `formula = [1,5,6,7,3]`, The output should be `true`.

For `formula = [5,6,7]`, The output should be `true`.

For `formula = [5,6,7,8]`, The output should be `true`.

For `formula = [6,7,8]`, The output should be `false`.

For `formula = [7,8]`, The output should be `true`.


# Note

- All inputs are valid. Array contains at least 1 digit. Each digit appears at most once. 

- Happy Coding `^_^`

Difficulty: introductory

Starter code:

def isValid(formula):
	

Solutions:
def isValid(formula):
  return not ( \
    (    1 in formula and     2 in formula) or \
    (    3 in formula and     4 in formula) or \
    (    5 in formula and not 6 in formula) or \
    (not 5 in formula and     6 in formula) or \
    (not 7 in formula and not 8 in formula))

def isValid(formula):
    if ((not 7 in formula) and (not 8 in formula)):
        return False
    if ((1 in formula) and (2 in formula)):
        return False
    if ((3 in formula) and (4 in formula)):
        return False
    if ((5 in formula and not 6 in formula) or (6 in formula and not 5 in formula)):
        return False
    return True

def isValid(formula):
    a,b,c,d,e,f,g,h = (v in formula for v in range(1,9))
    return not(a and b) and not(c and d) and e^f^1 and (g or h)

def isValid(formula):
    if 1 in formula and 2 in formula: return False
    if 3 in formula and 4 in formula: return False
    if 5 in formula and 6 not in formula: return False
    if 5 not in formula and 6 in formula: return False
    if 7 not in formula and 8 not in formula: return False
    return True

def isValid(formula):
    f = set(formula)
    return (not {1, 2} <= f
        and not {3, 4} <= f
        and ((5 in f) == (6 in f))
        and bool({7, 8} & f))

def isValid(formula):
    if 1 in formula and 2 in formula :
        return False
    if 3 in formula and 4 in formula :
        return False
    if 5 in formula and not 6 in formula :
        return False
    if 5 not in formula and 6 in formula :
        return False
    if not 7 in formula and not 8 in formula :
        return False
    return True

def isValid(formula):
    if {1,2} <= set(formula) or {3,4} <= set(formula):
        print(1)
        return False
    elif (5 in formula and 6 not in formula) or (6 in formula and 5 not in formula):
        print(3)
        return False
    elif 7 not in formula and 8 not in formula:
        print(4)
        return False
    else:
        return True

def isValid(formula):
    if not any(el in formula for el in (7, 8)):
        return False
    elif all(el in formula for el in (1, 2)):
        return False
    elif all(el in formula for el in (3, 4)):
        return False
    elif 5 in formula and 6 not in formula:
        return False
    elif 6 in formula and 5 not in formula:
        return False
    else:
        return True

def isValid(formula):
    if 1 in formula or 2 in formula:
        if (1 in formula) and (2 in formula):
            return False
    if 3 in formula or 4 in formula:
        if (3 in formula and 4 in formula):
            return False
    if 7 not in formula and 8 not in formula:
        return False
    if 5 in formula or 6 in formula:
        if 5 not in formula or 6 not in formula:
            return False 
    return True

def isValid(formula):
    return (
        ((1 in formula) + (2 in formula) < 2)
        and ((3 in formula) + (4 in formula) < 2)
        and ((5 in formula) == (6 in formula))
        and ((7 in formula) or (8 in formula))
    )


def isValid(f):
     return (not (((1 in f) and (2 in f) or ((3 in f) and (4 in f)))) and ((5 in f)==(6 in f)) and ((7 in f) or (8 in f)))  ##

def isValid(f):
    if 1 in f and 2 in f:
        return False
    else:
        if 3 in f and 4 in f:
            return False
        else:
            if 5 in f and 6 in f:
                if 7 in f or 8 in f:
                    return True
                else:
                    return False
            else:
                if 5 in f or 6 in f:
                    return False
                else:
                    if 7 in f or 8 in f:
                        return True
                    else:
                        return False

def isValid(formula):
    if (1 in formula and 2 in formula) or (3 in formula and 4 in formula) or \
    (7 not in formula and 8 not in formula) or (5 in formula and 6 not in formula) or \
    (6 in formula and 5 not in formula):    return False
    return True

def isValid(formula):
    s = ''.join(sorted(map(str,formula)))
    return not any(['12' in s,'34' in s,('5' in s)+('6' in s) == 1,('7' in s)+('8' in s) == 0])

from typing import List

def isValid(f: List[int]):
    """ Check if choosen package of paterials is valid according to the rules. """
    return all(
        [
            (1 in f) ^ (2 in f) if 1 in f or 2 in f else True,
            (3 in f) ^ (4 in f) if 3 in f or 4 in f else True,
            all([5 in f, 6 in f]) if 5 in f or 6 in f else True,
            any([7 in f, 8 in f])
        ]
    )

def isValid(f):
    return (((1 in f) ^ (2 in f)) or ((1 not in f) and (2 not in f))) and (((3 in f) ^ (4 in f)) or ((3 not in f) and (4 not in f))) and (((5 in f) and (6 in f)) or ((5 not in f) and (6 not in f))) and ((7 in f) | (8 in f))

def isValid(f):
    if 1 in f and 2 in f: return False
    if 3 in f and 4 in f: return False
    if (5 in f or 6 in f) and not (5 in f and 6 in f): return False
    if not (7 in f or 8 in f): return False
    return True

def isValid(f):
    invalid = ((1,2), (3, 4))

    if 1 in f and 2 in f :
        return False
    if 3 in f and 4 in f:
        return False
    if (5 in f or 6 in f) and not (5 in f and 6 in f):
        return False
    if not (7 in f or 8 in f):
        return False
    return True

def isValid(formula):
    
    material =  [m + 1 in formula for m in range(8)]
    r1 = not (material[0] and material[1])   
    r2 = not (material[2] and material[3]) 
    r3 = not (material[4] ^ material[5])
    r4 = material[6]  or material[7] 
    return r1 and r2 and r3 and r4 
  


def isValid(formula):
    mat = [m+1 in formula for m in range(8)]
    return all((
        not (mat[0] and mat[1]),
        not (mat[2] and mat[3]),
        not (mat[4] ^ mat[5]),
        mat[6] or mat[7]
    ))

def isValid(formula):
    material = [m + 1 in formula for m in range(8)]
    r1 = not (material[0] and material[1])  # material1 and material2 cannot be selected at the same time
    r2 = not (material[2] and material[3])  # material3 and material4 cannot be selected at the same time
    r3 = not (material[4] ^ material[5])  # material5 and material6 must be selected at the same time
    r4 = material[6] or material[7]  # material7 or material8 must be selected(at least one, or both)
    return r1 and r2 and r3 and r4


def isValid(formula):
    if 1 in formula and 2 in formula:
        return False
    if 3 in formula and 4 in formula:
        return False
    if 5 in formula and 6 not in formula:
        return False
    if 5 not in formula and 6 in formula:
        return False
    if not 7 in formula and 8 not in formula:
        return False
    return True
        


def isValid(formula):
    if ((1 in formula) and (2 in formula)):
        return False
    if ((3 in formula) and (4 in formula)):
        return False
    if ((5 in formula) ^ (6 in formula)):
        return False
    if ((7 not in formula) and (8 not in formula)):
        return False
    return True
        


def isValid(formula):
    if (1 in formula and 2 in formula) or (3 in formula and 4 in formula):
        return False
    if (7 not in formula) and (8 not in formula):
        return False
    if (5 in formula and 6 not in formula) or (6 in formula and 5 not in formula):
        return False
    else:
        return True

def isValid(formula):
    test1 = not (1 in formula and 2 in formula)
    test2 = not (3 in formula and 4 in formula)
    test3 = (5 in formula and 6 in formula) or (5 not in formula and 6 not in formula)
    test4 = (7 in formula or 8 in formula)
    
    print((test1, test2, test3, test4))
    
    return test1 and test2 and test3 and test4


def isValid(formula):
    if 3 in formula and 4 in formula: return False
    elif 1 in formula and 2 in formula: return False
    elif 5 in formula and 6 not in formula: return False
    elif 5 not in formula and 6 in formula: return False
    elif 7 not in formula and 8 not in formula: return False
    else: return True

def isValid(formula):
    if 1 in formula and 2 in formula:
        return False
    elif 3 in formula and 4 in formula:
        return False
    elif 5 in formula and not 6 in formula:
        return False
    elif 6 in formula and not 5 in formula:
        return False
    elif 7 not in formula and 8 not in formula:
        return False
    else:
        return True

def isValid(formula):
    list = []
    for x in range(8):
        list.append(9)
    for x in formula:
        list[x - 1] = x
    if((list[0] != 9) and (list[1] != 9)):
        return False
    elif((list[2] != 9) and (list[3] != 9)): 
        return False
    elif((list[4] == 9 and list[5] != 9) or (list[4] != 9 and list[5] == 9)): 
        return False
    elif((list[6] + list[7]) == 18): 
        return False
    else: return True

def isValid(seq):
    return (7 in seq or 8 in seq) and ((5 in seq and 6 in seq) or (5 not in seq and 6 not in seq)) and (1 not in seq or 2 not in seq) and (3 not in seq or 4 not in seq)

def isValid(formula): 
    if 1 in formula and 2 in formula: return False
    elif 3 in formula and 4 in formula: return False
    elif 5 in formula and 6 not in formula: return False
    elif 6 in formula and 5 not in formula: return False
    elif 7 in formula or 8 in formula: return True
    elif 7 not in formula or 8 not in formula: return False


def isValid(formula):
    m = [0, 1, 2, 3, 4, 5, 6, 7, 8]
    t = []
  
    def mat1_mat2():
        ## material1 and material2 cannot be selected at the same time
        count = 0
        for i in formula:
            if i == 1:
                count+=1
            if i == 2:
                count+=1
        if count == 0:
            t.append(True)
        elif count == 1:
            t.append(True)
        else:
            t.append(False)

    def mat3_mat4():
        ## material3 and material4 cannot be selected at the same time
        count = 0
        for i in formula:
            if i == 3:
                count+=1
            if i == 4:
                count+=1
        if count == 0:
            t.append(True)
        elif count == 1:
            t.append(True)
        else:
            t.append(False)

    def mat5_mat6():
        # material5 and material6 must be selected at the same time
        count = 0
        for i in formula:
            if i == 5:
                count+=1
            if i == 6:
                count+=1
        if count == 0:
            t.append(True)
        elif count == 1:
            t.append(False)
        else:
            t.append(True)

    def mat7_mat8():
        # material7 or material8 must be selected(at least one, or both)
        count = 0
        for i in formula:
            if i == 7:
                count+=1
            if i == 8:
                count+=1
        if count == 1:
            t.append(True)
        elif count == 2:
            t.append(True)
        else:
            t.append(False)
    
    mat1_mat2()
    mat3_mat4()
    mat5_mat6()
    mat7_mat8()

    return all(t)

def isValid(f):
    return all((((7 in f) or (8 in f)), ((5 in f) == (6 in f)), not((3 in f) and (4 in f)), not((1 in f) and (2 in f))))

def isValid(formula):
    formula=sorted(formula)
    if len(formula)<1:
        return False
    elif (1 in formula and 2 in formula) or (3 in formula and 4 in formula) or (7 not in formula and 8 not in formula):
        return False
    elif (5 in formula and 6 not in formula) or (6 in formula and 5 not in formula):
        return False
    else:
        return True



def isValid(f):
    if 1 in f and 2 in f: return False
    elif 3 in f and 4 in f: return False
    elif 6 in f and 5 not in f: return False
    elif 5 in f and 6 not in f: return False
    elif 5 in f and 6 in f and 7 in f: return True
    elif 5 in f and 6 in f and 8 in f: return True 
  
    
 
 
    elif 7 in f or 8 in f: return True
    else: return False 
 
    


def isValid(formula):
    if not(7 in formula or 8 in formula):
        return False
    elif 1 in formula and 2 in formula:
        return False
    elif 3 in formula and 4 in formula:
        return False
    elif 5 in formula:
        if 6 not in formula:
            return False
    elif 6 in formula:
        if 5 not in formula:
            return False
    return True


def isValid(formula):
    if not 7 in formula and not 8 in formula:
        return False
    if 5 in formula and 6 not in formula or 6 in formula and 5 not in formula:
        return False
    if 1 in formula and 2 in formula:
        return False
    if 3 in formula and 4 in formula:
        return False
    return True


def isValid(formula):
    f = set(formula)
    if 7 not in f and 8 not in f:
        return False
    if 1 in f and 2 in f:
        return False
    if 3 in f and 4 in f:
        return False
    return (5 in f) == (6 in f)


def isValid(formula):
    if 1 in formula: 
        if 2 in formula: return False 
    if 2 in formula: 
        if 1 in formula: return False
    if 3 in formula: 
        if 4 in formula: return False 
    if 4 in formula: 
        if 3 in formula: return False 
    if 5 in formula: 
        if 6 not in formula: return False 
    if 6 in formula: 
        if 5 not in formula: return False
    if 7 not in formula and 8 not in formula: 
        return False
    return True

def isValid(formula):
    print(formula)
    f = list(map(str, formula))
    f1 = str("".join(f))
    b = 0
    if f1.find('7') != -1:
        for i in f1:
            b = i
            if b == '1':
                if f1.find('2') == -1:
                    continue
                else:
                    return False
            elif b == '3':
                if f1.find('4') == -1:
                    continue
                else:
                    return False
            elif b == '5':
                if f1.find('6') != -1:
                    return True
                else:
                    return False
            elif b == '6':
                if f1.find('5') != -1:
                    return True
                else:
                    return False
    else: 
        if f1.find('8') != -1:
            for i in f1:
                b = i
                if b == '1':
                    if f1.find('2') == -1:
                        continue
                    else:
                        return False
                elif b == '3':
                    if f1.find('4') == -1:
                        continue
                    else:
                        return False
                elif b == '5':
                    if f1.find('6') != -1:
                        return True
                    else:
                        return False
                elif b == '6':
                    if f1.find('5') != -1:
                        return True
                    else:
                        return False
        else:
            return False
            
            
    return True


def isValid(formula):
    if formula.count(1) and formula.count(2):
        return False
    if formula.count(3) and formula.count(4):
        return False
    if formula.count(5)+formula.count(6)==1:
        return False
    if formula.count(7)+formula.count(8)==0:
        return False
    return True

def isValid(formula):
    return not (1 in     formula and 2 in     formula or \
                3 in     formula and 4 in     formula or \
                5 in     formula and 6 not in formula or \
                5 not in formula and 6 in     formula or \
                7 not in formula and 8 not in formula
    )

def isValid(formula):
    if 1 in formula and 2 in formula:
        return False
        
    elif 3 in formula and 4 in formula:
        return False
        
    elif 7 not in formula and 8 not in formula:
        return False
        
    elif 5 in formula:
        if not 6 in formula:
            return False
            
    elif 6 in formula:
        if not 5 in formula:
            return False
    
    return True

def isValid(f):
    if 1 in f and 2 in f:return False
    if 3 in f and 4 in f: return False
    if not 7 in f and not 8 in f:return False
    if 5 in f and not 6 in f:return False
    if not 5 in f and 6 in f:return False
    return True
        


def isValid(a):
    for x, y in [[1,2], [3,4]]:
        if x in a and y in a: return False
    return (5 in a) == (6 in a) and any(x in a for x in (7,8))

def isValid(formula):
    rules = [not(1 in formula and 2 in formula)]
    rules.append(not(3 in formula and 4 in formula))    
    rules.append((5 in formula and 6 in formula) or (5 not in formula and 6 not in formula))
    rules.append(7 in formula or 8 in formula)
    print(rules)
    return all(rules)

def isValid(formula):
    valid_formula = True

    if all(x in formula for x in [1, 2]):
        valid_formula = False

    if all(x in formula for x in [3, 4]):
        valid_formula = False

    if 5 in formula and 6 not in formula:
        valid_formula = False
        
    if 6 in formula and 5 not in formula:
        valid_formula = False
        
    if 7 not in formula and 8 not in formula:
        valid_formula = False



    return valid_formula

def isValid(formula):
    var1=(7 in formula or 8 in formula)
    if var1==False:
        return False
    if (1 in formula and 2 in formula):
        return False
    if (3 in formula and 4 in formula):
        return False
    if 5 in formula:
        if 6 in formula:
            var1=True
        else:
            return False
    if 6 in formula:
        if 5 in formula:
            var1=True
        else:
            return False
    return True

def isValid(formula=[1, 3, 7]):
    fr = not (1 in formula and 2 in formula)
    sr = not (3 in formula and 4 in formula)
    tr = not((5 in formula and 6 not in formula) or (5 not in formula and 6 in formula))
    four = (7 in formula or 8 in formula)
    return fr and sr and tr and four

def isValid(formula):
    if 3 in formula and 4 in formula: return False
    if 1 in formula and 2 in formula: return False
    if 7 not in formula and 8 not in formula : return False
    if 5 in formula and 6 not in formula : return False
    if 6 in formula and 5 not in formula : return False
    return True

def isValid(formula):
    if (1 in formula) and (2 in formula): return False
    if (3 in formula) and (4 in formula): return False
    if (6 in formula) != (5 in formula): return False
    if (not 7 in formula) and (not 8 in formula): return False

    return True

def isValid(formula):
    if 7 in formula or 8 in formula:
        if 1 in formula and 2 in formula:
            return False
        if 3 in formula and 4 in formula:
            return False
        if 5 in formula:
            if 6 not in formula:
                return False
        if 6 in formula:
            if 5 not in formula:
                return False
        return True
    else:
        return False

def isValid(formula):
    if 1 in formula and 2 in formula:
        return False
    if 3 in formula and 4 in formula:
        return False
    if 5 in formula and 6 not in formula:
        return False
    if 6 in formula and 5 not in formula:
        return False   
    if 8 not in formula and 7 not in formula:
        return False
    return True

def isValid(a):
    b = not ((1 in a) and (2 in a))
    c = not ((3 in a) and (4 in a))
    d = ((5 in a) == (6 in a))
    e = ((7 in a) or (8 in a))
    print([b,c,d,e])
    return all([b,c,d,e])


def isValid(formula):
    if 7 in formula or 8 in formula:
        if not(1 in formula and 2 in formula):
            if not(3 in formula and 4 in formula):
                if (5 not in formula and not 6 in formula) or (5 in formula and 6 in formula):
                        return True
                else:
                    return False
            else:
                return False
        else:
            return False
    else:
        return False



def isValid(formula):
    a, b = sum([1 for c in formula if c in [1, 2]]), sum([1 for c in formula if c in [3, 4]])
    c, d = sum([1 for c in formula if c in [5, 6]]), sum([1 for c in formula if c in [7, 8]])

    return True if (a in range(2) and b in range(2)) and ((c==0 or c==2) and (d in range(1, 3))) else False


def isValid(f):
    return (7 in f or 8 in f) and (((1 in f) + (2 in f))!=2) and (((3 in f) + (4 in f))!=2) and (((5 in f) + (6 in f))!=1)

def isValid(formula):
    return not any([1 in formula and 2 in formula,
                    3 in formula and 4 in formula,
                    5 in formula and not 6 in formula,
                    6 in formula and not 5 in formula]) and any([7 in formula, 8 in formula])


def isValid(formula):
    if 3 in formula and 4 in formula:
        return False
    elif 1 in formula and 2 in formula:
        return False
    elif 5 in formula and 6 not in formula or 6 in formula and 5 not in formula:
        return False
    elif 7 not in formula and 8 not in formula:
        return False
    else:
        return True

def isValid(formula):
    if 1 in formula:
        if 2 in formula:
            return False
    if 3 in formula:
        if 4 in formula:
            return False
    if 5 in formula:
        if 6 not in formula:
            return False
    if 6 in formula:
        if 5 not in formula:
            return False
    if (7 not in formula) and (8 not in formula):
        return False
    return True

def isValid(f):
    return ((7 in f) or (8 in f)) and not(((5 in f) and (6 not in f)) or ((6 in f) and (5 not in f))) and not ((1 in f) and (2 in f)) and not ((3 in f) and (4 in f))

def isValid(formula):
    r1 = not(1 in formula and 2 in formula)
    r2 = not(3 in formula and 4 in formula)
    r3 = (5 in formula) == (6 in formula)
    r4 = 7 in formula or 8  in formula
    return all([r1,r2,r3,r4])


def isValid(formula):
    if (7 not in formula) and (8 not in formula):
        return False
    if (5 in formula and 6 not in formula) or 6 in formula and 5 not in formula:
        return False
    if (1 in formula and 2 in formula) or (3 in formula and 4 in formula):
        return False
    return True

def isValid(formula: list) -> bool:
    if 7 in formula or 8 in formula or set([7, 8]).issubset(formula):
        if set([1, 2]).issubset(formula):
            return False
        if set([3, 4]).issubset(formula):
            return False
        if 5 in formula or 6 in formula:
            return set([5, 6]).issubset(formula)
        if 7 in formula or 8 in formula or set([7, 8]).issubset(formula):
            return True
    return False


def isValid(formula):
    rule_1 = 1 not in formula or 2 not in formula
    rule_2 = 3 not in formula or 4 not in formula
    rule_3 = 5 in formula and 6 in formula or 5 not in formula and 6 not in formula
    rule_4 = 7 in formula or 8 in formula
    return rule_1 and rule_2 and rule_3 and rule_4

def isValid(formula):
    if len(set(formula).intersection(set([1,2])))>1 or len(set(formula).intersection(set([3,4])))>1 or len(set(formula).intersection(set([5,6])))==1 or len(set(formula).intersection(set([7,8])))<1:
        return False
    return True


def isValid(f):
    a, b, c, d, e, f, g, h = [v in f for v in range(1, 9)]
    return not(a and b) and not(c and d) and not (e ^ f) and (g or h)


def isValid(f):
    if 7 not in f and 8 not in f: return False
    if 1 in f and 2 in f: return False
    if 3 in f and 4 in f: return False
    if 5 in f and 6 not in f: return False
    if 6 in f and 5 not in f: return False
    return True

def isValid(formula):
    count_1 = formula.count(1)
    count_2 = formula.count(2)
    if count_1 == count_2 == 1:
        return False

    count_1 = formula.count(3)
    count_2 = formula.count(4)
    if count_1 == count_2 == 1:
        return False

    count_1 = formula.count(5)
    count_2 = formula.count(6)
    if count_1 != count_2:
        return False

    count_1 = formula.count(7)
    count_2 = formula.count(8)
    if count_1 == count_2 == 0:
        return False
    return True

def isValid(formula):
    if 7 in formula or 8 in formula: 
        if 1 in formula and 2 in formula:
            return False
        if 3 in formula and 4 in formula:
            return False
        if 5 in formula:
            if 6 in formula:
                return True
            else:
                return False
        if 6 in formula:
            if 5 in formula:
                return True
            else:
                return False
        return True 
    return False

def isValid(formula):
    if 1 in formula and 2 in formula: return False
    if 3 in formula and 4 in formula: return False
    if 5 in formula and 6 not in formula: return False
    if not 5 in formula and 6 in formula: return False
    if not 7 in formula and not 8 in formula: return False
    return True

def isValid(formula):
    if ((1 in formula) and (2 in formula)) or ((3 in formula) and (4 in formula)) or\
         5 in formula and not(6 in formula) or not(5 in formula) and 6 in formula or \
        not(7 in formula) and not(8 in formula):
        return False
    elif 7 in formula or 8 in formula or \
        (7 in formula and 8 in formula) or \
        5 in formula and 6 in formula :
        return True
    else: 
        return False


def isValid(formula):
    # material7 or  material8 must be selected(at least one, or both)
    if 7 in formula or 8 in formula:
    # material5 and material6 must be selected at the same time
        if (5 in formula and 6 in formula) or (not 5 in formula and not 6 in formula):
    # material3 and material4 cannot be selected at the same time
            if (3 in formula and not 4 in formula) or (4 in formula and not 3 in formula) or (not 3 in formula and not 4 in formula):
    # material1 and material2 cannot be selected at the same time
                if (1 in formula and not 2 in formula) or (2 in formula and not 1 in formula) or (not 1 in formula and not 2 in formula):
                    return True
                else: return False
            else: return False
        else: return False
    else: return False

def isValid(formula):
    if 7 in formula or 8 in formula:
        if 1 in formula and 2 in formula:
            return False
        elif 3 in formula and 4 in formula:
            return False
        elif 5 in formula:
            if 6 in formula:
                return True
            else:
                return False
        elif 6 in formula:
            if 5 in formula:
                return True
            else:
                return False
        else:
            return True
    else:
        return False

def isValid(f):
    if 1 in f and 2 in f:
        return False
    elif 3 in f and 4 in f:
        return False
    elif (5 in f and not(6 in f)) or (6 in f and not(5 in f)):
        return False
    elif not(7 in f) and not(8 in f):
        return False
    return True

def isValid(formula):
    flag = True
    if 1 in formula:
        if 2 in formula:
            flag = False
    if 3 in formula:
        if 4 in formula:
            flag = False
    if 5 in formula:
        if 6 not in formula:
            flag = False
    if 6 in formula:
        if 5 not in formula:
            flag = False
    if 7 not in formula and 8 not in formula:
        flag = False
    return flag

def isValid(formula):
    print(formula)
    if 1 in formula and 2 in formula:
        return 0
    if 3 in formula and 4 in formula:
        return 0
    if 5 in formula and not 6 in formula:
        return 0
    if 6 in formula and not 5 in formula:
        return 0
    if 7 in formula or 8 in formula:
        return 1
    else:
        return 0

def isValid(formula):
    
    if 1 in formula and 2 in formula:
        return False 
            
    if 3 in formula and 4 in formula:
        return False 
            
    if (5 not in formula or 6 not in formula) and (5  in formula or 6  in formula):
        return False
    
    if 7 not in formula and 8 not in formula:
        return False 
    
    return True

def isValid(formula):
    if 7 in formula or 8 in formula:
        if 1 in formula and 2 in formula or 3 in formula and 4 in formula:
            return False
        if 5 in formula and 6 not in formula or 6 in formula and 5 not in formula:
            return False
        return True
    return False

def isValid(formula):
    """
        Returns true if the formula is valid, false otherwise.
        
        Rules:
        • material1 and material2 cannot be selected at the same time
        • material3 and material4 cannot be selected at the same time
        • material5 and material6 must be selected at the same time
        • material7 or  material8 must be selected(at least one, or both)
    """
    if 1 in formula and 2 in formula:
        return False
    
    if 3 in formula and 4 in formula:
        return False
    
    if 5 in formula or 6 in formula:
        if 5 not in formula or 6 not in formula:
            return False
    
    if 7 not in formula and 8 not in formula:
        return False
    
    return True

def isValid(formula):
    if 7 in formula or 8 in formula:
        if 1 in formula and 2 in formula:
            return False
        if 3 in formula and 4 in formula:
            return False
        if (5 in formula and not 6 in formula) or (6 in formula and not 5 in formula):
            return False
        return True
    else:
        return False


def isValid(formula):
    return False if (1 in formula and 2 in formula) or (3 in formula and 4 in formula) or (5 not in formula and 6 in formula) or (5 in formula and 6 not in formula) or not (7 in formula or 8 in formula) else True

def isValid(formula):
    rules = list()
    rules.append(1) if 7 in formula or 8 in formula else rules.append(0)
    if 5 in formula or 6 in formula:
        rules.append(2) if 5 in formula and 6 in formula else rules.append(0)
    if (3 in formula) or (4 in formula):
        rules.append(0) if 3 in formula and 4 in formula else rules.append(3)
    if (1 in formula) or (2 in formula):
        rules.append(0) if 1 in formula and 2 in formula else rules.append(4)
    return True if min(rules) != 0 else False

def isValid(f):
    if 5 in f or 6 in f:
        if not (5 in f and 6 in f):
            return False
    
    if not (7 in f or 8 in f):
        return False

    if 1 in f or 2 in f:
        if 1 in f and 2 in f:
            return False

    if 3 in f or 4 in f:
        if 3 in f and 4 in f:
            return False

    return True
print(isValid([1,3,7]))

def isValid(f):
    if len(f)==1 and f[0]!=7 and f[0]!=8:
        return False
    elif 1 in f and 2 in f:
        return False
    elif 3 in f and 4 in f:
        return False
    elif 5 not in f and 6 in f :
        return False
    elif 5 in f and 6 not in f:
        return False
    elif 7 in f or 8 in f:
        return True
    else:
        return False

def isValid(formula):
    if 7 not in formula and 8 not in formula:
        return False
    if 1 in formula and 2 in formula:
        return False
    if 3 in formula and 4 in formula:
        return False
    if 5 in formula and 6 not in formula:
        return False
    if 6 in formula and 5 not in formula:
        return False
    if 7 in formula or 8 in formula:
        return True#

def isValid(formula):
    if 1 in formula and 2 in formula:
        return False
    elif 3 in formula and 4 in formula:
        return False
    elif 5 in formula and 6 not in formula:
        return False
    elif 6 in formula and 5 not in formula:
        return False
    if 7 in formula or 8 in formula:
        return True
    else:
        return False
    

        



def isValid(formula):
  if len(formula) == 0:
    return False
  elif len(formula) == 1:
    if 7 in formula or 8 in formula:
      return True
    else:
      return False
  elif len(formula) == 2:
    if 7 in formula and 8 in formula:
      return True
    elif 7 in formula or 8 in formula:
      if 5 in formula or 6 in formula:
        return False
      else:
        return True
    else:
      return False
  elif len(formula) == 3:
    if 7 in formula and 8 in formula:
      if 5 in formula or 6 in formula:
        return False
      else:
        return True
    elif 7 in formula or 8 in formula:
      if 5 in formula and 6 in formula:
        return True
      elif (3 in formula and 4 not in formula) or (4 in formula and 3 not in formula):
        if (1 in formula and 2 not in formula) or (2 in formula and 1 not in formula):
          return True
        else:
          return False
      else:
        return False
    else:
      return False
  elif len(formula) == 4:
    if 7 in formula and 8 in formula:
      if 5 in formula and 6 in formula:
        return True
      elif (3 in formula and 4 not in formula) or (4 in formula and 3 not in formula):
        if (1 in formula and 2 not in formula) or (2 in formula and 1 not in formula):
          return True
        else:
          return False
      else:
        return False
    elif 7 in formula or 8 in formula:
      if 5 in formula and 6 in formula:
        return True
      else:
        return False
    else:
      return False
  elif len(formula) == 5:
    if 7 in formula and 8 in formula:
      if 5 in formula and 6 in formula:
        return True
      else:
        return False
    elif 7 in formula or 8 in formula:
      if 5 in formula and 6 in formula:
        if (3 in formula and 4 not in formula) or (4 in formula and 3 not in formula):
          if (1 in formula and 2 not in formula) or (2 in formula and 1 not in formula):
            return True
          else:
            return False
        else:
          return False
      else:
        return False
    else:
      return False
  elif len(formula) == 6:
    if 7 in formula and 8 in formula:
      if 5 in formula and 6 in formula:
        if (3 in formula and 4 not in formula) or (4 in formula and 3 not in formula):
          if (1 in formula and 2 not in formula) or (2 in formula and 1 not in formula):
            return True
          else:
            return False
        else:
          return False
      else:
        return False
    else:
      return False
  elif len(formula) > 6:
    return False

def isValid(formula):
    if 1 in formula and 2 in formula:
        return False
    elif 3 in formula and 4 in formula:
        return False
    if 5 in formula and 6 not in formula:
        return False
    elif 6 in formula and 5 not in formula:
        return False
    elif 7 not in formula and 8 not in formula:
        return False
    else:
        return True

def isValid(formula):
    if 7 not in formula and 8 not in formula:
        return False
    if 5 in formula and 6 not in formula or 6 in formula and 5 not in formula:
        return False
    if 3 in formula and 4 in formula:
        return False
    if 1 in formula and 2 in formula:
        return False
    return True

def isValid(formula):
     check1 = (1 in formula and 2 in formula)#should be false
     check2 = (3 in formula and 4 in formula) #should be false
     check3 = (5 in formula and 6 not in formula) #should be false
     check4 = (6 in formula and 5 not in formula) # should be false
     check5 = (7 in formula or 8 in formula) #should be true
     #check_list=[check1, check2, check]
     if check1==True or check2==True or check3==True or check4==True or check5==False :
        return False
     else:
        return True

def isValid(formula):
    if (1 in formula and 2 in formula):
        return False
    if (3 in formula and 4 in formula):
        return False
    if (not (7 in formula or 8 in formula)):
        return False
    if ((5 in formula and not (6 in formula)) or (not(5 in formula) and 6 in formula)):
        return False
    return True

def isValid(formula):
    d = {1:1, 2:1, 3:2, 4:2, 5:3, 6:3, 7:4, 8:4}
    r = [d[i] for i in formula]
    l = {}
    for x in r:
                
        if (x == 4 and r.count(4) == 1) or (x == 4 and r.count(4) == 2):
            l[4] = True
        if x == 1 and r.count(1) == 1:
            l[1] = True
             
        if x == 2 and r.count(2) == 1:
            l[2] = True
        
        if x == 3 and r.count(3) == 2:
            l[3] = True
        
        
        if  r.count(4) == 0:
            l[4] = False        
        
        if x == 1 and r.count(1) != 1:
            l[1] = False
             
        if x == 2 and r.count(2) != 1:
            l[2] = False
        
        if x == 3 and r.count(3) != 2:
            l[3] = False
        
        
        
        
        
        
        
    result = [k for k in list(l.values())]
    return (sum(result) == len(result))
    
        
    
    
    
    
    


def isValid(formula):
    
    print(formula)
    
    if 1 in formula and 2 in formula:
        return False
    
    if 3 in formula and 4 in formula:
        return False

    if 5 in formula and 6 not in formula:
        return False
    
    if 6 in formula and 5 not in formula:
        return False
        
    if 7 not in formula and 8 not in formula:
        return False
    else:
        return True

def isValid(f):
    return  ((1 not in f) or (2 not in f)) and \
            ((3 not in f) or (4 not in f)) and \
            ((5 in f) == (6 in f))         and \
            ((7 in f) or (8 in f))

def isValid(formula):
    exclusive = [[1, 2], [3, 4]]
    implies = {5: 6, 6: 5}
    required = {7, 8}
    
    for m1, m2 in exclusive:
        if m1 in formula and m2 in formula:
            return False
        
    for m in formula:
        if m in implies and not implies[m] in formula:
            return False
        
    if not any(m in formula for m in required):
        return False
    
    return True

def isValid(f):
    y = ''.join(map(str,sorted(f)))
    return '12' not in y and '34' not in y and ('56' in y or '5' not in y and '6' not in y) and ('7' in y or '8' in y)

def isValid(formula):
    
    
    if 1 in formula and 2 in formula:
        
        print("1")
        return False
    
    elif 3 in formula and 4 in formula: 
        print("2")
        return False
    
    elif 5 in formula and 6 not in formula:
        print("3")
        return False
        
    elif 6 in formula and 5 not in formula:
        print("4")
        return False
    
    elif not ( 7 in formula or 8 in formula):
        print("5")
        return False
    
    return True

def isValid(formula):
    if (1 in formula) and (2 in formula):
        return False
    if (3 in formula) and (4 in formula):
        return False
    if (7 not in formula) and (8 not in formula):
        return False
    if (5 in formula or 6 in formula) and not(5 in formula and 6 in formula):
        return False
    return True
        


def isValid(formula):
#     print((1 in formula) != (2 in formula))
    return not ((1 in formula) and (2 in formula)) \
            and not ((3 in formula) and (4 in formula)) \
            and (5 in formula) == (6 in formula) \
            and ((7 in formula) or (8 in formula))

def isValid(formula):
    
    return ((7 in formula or 8 in formula)and not(1 in formula and 2 in formula) and not(3 in formula and 4 in formula) and  ((5 in formula and 6 in formula)or (5 not in formula and 6 not in formula)))