### -> -> -> USER: P0

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = max(opens + 1, conseq_opens)
                
                if new_conseq_opens <= d:
                    q.append([s + "[", opens + 1, closes, new_conseq_opens])
                    
            if closes < opens:
                q.append([s + "]", opens, closes+1, conseq_opens])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]


##############

### -> -> -> USER: P1

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop()
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = max(conseq_opens, d)
                
                if new_conseq_opens <= d:
                    q.append([s + '[', opens + 1, closes, conseq_opens + 1])
                    
            if closes < opens:
                q.append([s + ']', opens, closes + 1, conseq_opens - 1])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]


##############

### -> -> -> USER: P2

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop()
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                # TODO: fill this part
                new_conseq_opens = 0
                new_conseq_opens = max(new_conseq_opens, conseq_opens + 1)
                
                if new_conseq_opens <= d:
                    # TODO: fill this part
                    q.append([s + '[', opens + 1, closes, new_conseq_opens])
                    
            if closes < opens:
                q.append([s + ']', opens, closes + 1, conseq_opens - 1])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]

##############

### -> -> -> USER: P3

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        new_conseq_opens = opens
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                q.append([s + '[', opens + 1, closes, conseq_opens + 1])

                if new_conseq_opens <= d:
                    new_conseq_opens = max(opens + 1, conseq_opens)
                    
            if closes < opens:
                q.append([s + ']', opens - 1, closes + 1, new_conseq_opens])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]


##############

### -> -> -> USER: P4

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                q.append(s + "[", open + 1, closes, conseq_opens + 1)
                
                if new_conseq_opens <= d:
                    q.append(s + "[", opens + 1, closes, conseq_opens + 1)
                    
            if closes < opens:
                q.append(s + "]", opens, closes + 1, 0)
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]


##############

### -> -> -> USER: P5

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop()
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = conseq_opens + 1
                
                if new_conseq_opens <= d:
                    q.append([s + "[", opens + 1, closes, new_conseq_opens])
                    
            if closes < opens:
                q.append([s + "]", opens, closes + 1, 0])
                
    return result


assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]


##############

### -> -> -> USER: P6

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = conseq_opens + 1
                
                if new_conseq_opens <= d:
                    q.append([s + '[', opens + 1, closes, new_conseq_opens])
                    
            if closes < opens:
                q.append([s + ']', opens, closes + 1, 0])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]


##############

### -> -> -> USER: P7

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = 
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                # TODO: fill this part
                
                if new_conseq_opens <= d:
                    # TODO: fill this part
                    
            if closes < opens:
                # TODO: fill this part
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]


##############

### -> -> -> USER: P8

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                # TODO: fill this part
                new_conseq_opens = conseq_opens + 1
                
                if new_conseq_opens <= d:
                    # TODO: fill this part
                    q.append([s + "[", opens + 1, closes, new_conseq_opens])
                    
            if closes < opens:
                # TODO: fill this part
                q.append([s + "]", opens, closes + 1, 0])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]


##############

### -> -> -> USER: P9

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = max(conseq_opens, conseq_opens + 1)
                
                if new_conseq_opens <= d:
                    q.append([s + '[', opens + 1, closes, conseq_opens])
                    
            if closes < opens:
                q.append([s + ']', opens, closes + 1, conseq_opens])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]


##############

### -> -> -> USER: P10

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = max(opens, conseq_opens + 1)  
                
                if new_conseq_opens <= d:
                    q.append([s + '[', opens + 1, closes, conseq_opens + 1])
                    
            if closes < opens:
                q.append([s + ']', opens, closes + 1, conseq_opens])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]


##############

### -> -> -> USER: P11

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                # TODO: fill this part
                s += "["
                opens += 1
                new_conseq_opens = max(opens, conseq_opens)
                
                if new_conseq_opens <= d:
                    # TODO: fill this part
                    results.append(s)
                    
            if closes < opens:
                # TODO: fill this part
                s += "]"
                closes += 1
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]


##############

### -> -> -> USER: P12

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)# TODO: fill this part
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                # TODO: fill this part
                new_conseq_opens = conseq_opens + 1
                
                if new_conseq_opens <= d:
                    # TODO: fill this part
                    q.append([s + '[', opens + 1, closes, new_conseq_opens])

                    
            if closes < opens:
                # TODO: fill this part
                q.append([s + ']', opens, closes + 1, 0])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][[]]", "[][][]"]


##############

### -> -> -> USER: P13

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = conseq_opens+1
                
                if new_conseq_opens <= d:
                    q.append([s+'[', opens+1, closes, new_conseq_opens])
                    
            if closes < opens:
                q.append([s+']', opens, closes+1, 0])
                
    return result


assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"] #i think this is missing an element: '[][[]]'


##############

### -> -> -> USER: P14

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                q.append([s + '[', opens + 1, closes, conseq_opens + 1])
                
                if new_conseq_opens <= d:
                    q.append([s + ']', opens, closes + 1, 0])
                    
            if closes < opens:
                q.append([s + ']', opens, closes + 1, 0])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]


##############

### -> -> -> USER: P15

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new = conseq_opens
                
                if new_conseq_opens <= d:
                    q.append([s] + '[' + opens + 1, closes, conseq_opens)
                    
            if closes < opens:
                q.append([s + ']', opens, closes + 1])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]


##############

### -> -> -> USER: P16

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop()# TODO: fill this part
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:

                s = s + "]["
                opens += 1
                new_conseq_opens = conseq_opens + 1
                # TODO: fill this part
                
                if new_conseq_opens <= d:

                    s = s + "[]"
                    # TODO: fill this part
                    
            if closes < opens:
                s = s + "]"
                closes += 1
            
            result.append(s)
                # TODO: fill this part
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]


##############

### -> -> -> USER: P17

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = conseq_opens + 1
                if new_conseq_opens <= d:
                    q.append([s + '[', opens + 1, closes, new_conseq_opens])
                    
            if closes < opens:
                q.append([s + ']', opens, closes + 1, 0])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]



##############

### -> -> -> USER: P18

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q[0]
        
        if opens == n and closes == n:
            result.append('[')
        else:
            if opens < n:
                if new_conseq_opens <= d:
                    # TODO: fill this part
                    
            if closes < opens:
                # TODO: fill this part
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ['[[][]]', '[[]][]', '[][[]]', '[][][]']


##############

### -> -> -> USER: P19

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_d = d - 1
                if new_d != 0:
                    q.append[s + '[', opens + 1, closes, conseq_opens + 1]
                
                if new_conseq_opens <= d:
                    # TODO: fill this part
                    
            if closes < opens:
                # TODO: fill this part
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]


##############

### -> -> -> USER: P20

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q[0]
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = max(conseq_opens, opens+1)
                if new_conseq_opens <= d:
                    q.append([s+'[', opens + 1, closes, new_conseq_opens])
                    
            if closes < opens:
                q.append([s+']', opens, closes + 1, conseq_opens])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]


##############

### -> -> -> USER: P21

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = conseq_opens + 1
                
                if new_conseq_opens <= d:
                    q.append([s + '[', opens + 1, closes, new_conseq_opens])
                    
            if closes < opens:
                q.append([s + ']', opens, closes + 1, conseq_opens - 1])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ['[[][]]', '[[]][]', '[][[]]', '[][][]']


##############

### -> -> -> USER: P22

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop()
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                # TODO: fill this part
                if conseq_opens < d:
                    q.append((s + '[', opens + 1, closes, conseq_opens + 1))
                
                # if new_conseq_opens <= d:
                #     # TODO: fill this part
                #     q.append((s, + ']', opens, closes + 1, conseq_opens +1))
                    
            if closes < opens:
                # TODO: fill this part
                q.append((s + ']', opens, closes + 1, conseq_opens - 1))

                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]


##############

### -> -> -> USER: P23

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = conseq_opens
                
                if new_conseq_opens <= d:
                    q.append([s + "[", opens + 1, closes, conseq_opens])
                    
            if closes < opens:
                q.append([s + "]", opens, closes + 1, conseq_opens])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]


##############

### -> -> -> USER: P24

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = conseq_opens + 1
                
                if new_conseq_opens <= d:

                    q = s+"[", opens + 1, closes, new_conseq_opens
                    
            if closes < opens:

                 q = s+"]", opens, closes + 1, 0
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ['[[][]]', '[[]][]', '[][[]]', '[][][]']


##############

### -> -> -> USER: P25

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = conseq_opens + 1
                
                if new_conseq_opens <= d:
                    q.append([s + '[', opens + 1, closes, new_conseq_opens])
                    
            if closes < opens:
                q.append([s + ']', opens, closes + 1, conseq_opens])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]


##############

### -> -> -> USER: P26

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = conseq_opens + 1
                
                if new_conseq_opens <= d:
                    q.append([s + '[', opens + 1, closes, new_conseq_opens])
                    
            if closes < opens:
                q.append([s + ']', opens, closes + 1, conseq_opens])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ['[[][]]', '[[]][]', '[][[]]', '[][][]']


##############

### -> -> -> USER: P27

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = max(conseq_opens + 1, conseq_opens)
                
                if new_conseq_opens <= d:
                    q.append([s + '[', opens + 1, closes, new_conseq_opens])
                    
            if closes < opens:
                q.append([s + ']', opens, closes + 1, conseq_opens - 1])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ['[[][]]', '[[]][]', '[][[]]', '[][][]']


##############

### -> -> -> USER: P28

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = conseq_opens + 1
                
                if new_conseq_opens <= d:
                    q.append((s + '[', opens + 1, closes, new_conseq_opens))
                    
            if closes < opens:
                q.append((s + ']', opens, closes + 1, 0))
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]


##############

### -> -> -> USER: P29

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        new_conseq_opens = 0
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                # TODO: fill this part
                new_conseq_opens = max(conseq_opens, new_conseq_opens)
                if new_conseq_opens <= d:
                    # TODO: fill this part
                    q.append(['[', opens + 1, closes, new_conseq_opens])
            if closes < opens:
                # TODO: fill this part
                q.append([']', opens, closes + 1, new_conseq_opens])
                
    return result

# assert generate_brackets(2, 1) == ["[][]"]
# assert generate_brackets(2, 2) == ["[[]]", "[][]"]
# assert generate_brackets(3, 1) == ["[][][]"]
# assert generate_brackets(3, 2) == ["[[][]]", "[[]][]", "[][][]"]
print(generate_brackets(2, 1))


##############

### -> -> -> USER: P30

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)# TODO: fill this part
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                # TODO: fill this part
                new_conseq_opens = conseq_opens + 1
                if new_conseq_opens <= d:
                    # TODO: fill this part
                    q.append([s + '[', opens + 1, closes, conseq_opens + 1])
            if closes < opens:
                # TODO: fill this part
                q.append([s + ']', opens, closes + 1, conseq_opens - 1])
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ['[[][]]', '[[]][]', '[][[]]', '[][][]']


##############

### -> -> -> USER: P31

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = conseq_opens + 1
                
                if new_conseq_opens <= d:
                    q.append((s + '[', opens + 1, closes, new_conseq_opens))
                    
            if closes < opens:
                q.append((s + ']', opens, closes + 1, 0))
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ['[[][]]', '[[]][]', '[][[]]', '[][][]']


##############

### -> -> -> USER: P32

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens=conseq_opens+1
                
                if new_conseq_opens <= d:
                    q.append([s+'[', opens+1, closes, new_conseq_opens])
                    
            if closes < opens:
                q.append([s+']',opens,closes+1,0])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ['[[][]]', '[[]][]', '[][[]]', '[][][]']


##############

### -> -> -> USER: P33

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = conseq_opens + 1
                
                if new_conseq_opens <= d:
                    q.append([s + '[', opens + 1, closes, new_conseq_opens])
                    
            if closes < opens:
                q.append([s + ']', opens, closes + 1, 0])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ['[[][]]', '[[]][]', '[][[]]', '[][][]']


##############

### -> -> -> USER: P34

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = conseq_opens + 1
                if new_conseq_opens <= d:
                    q.append([s + "[", opens + 1, closes, new_conseq_opens])
            if closes < opens:
                q.append([s + "]", opens, closes + 1, 0])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ['[[][]]', '[[]][]', '[][[]]', '[][][]']


##############

### -> -> -> USER: P35

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                # TODO: fill this part
                new_conseq_opens = conseq_opens + 1
                
                if new_conseq_opens <= d:
                    # TODO: fill this part
                    q.append([s + "[", opens + 1, closes, new_conseq_opens])
                    
            if closes < opens:
                # TODO: fill this part
                s += "]"
                closes += 1
                q.append([s, opens, closes, 0])

    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ['[[][]]', '[[]][]', '[][[]]', '[][][]']


##############

### -> -> -> USER: P36

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop()
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = max(conseq_opens, d)
                
                if new_conseq_opens <= d:
                    q.append([s + '[', opens + 1, closes, new_conseq_opens + 1])
                    
            if closes < opens:
                q.append([s + ']', opens, closes + 1, new_conseq_opens - 1])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ['[[][]]', '[[]][]', '[][[]]', '[][][]']


##############

### -> -> -> USER: P37

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        # print(s, opens, closes, conseq_opens)
        
        if opens == n and closes == n: #  base case
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = max(conseq_opens, opens + 1)
                
                if new_conseq_opens <= d:
                    q.append([s+"[", opens+1, closes, new_conseq_opens])
                    
            if closes < opens:
                q.append([s+"]", opens, closes+1, conseq_opens])

        print(q)
                
    return result

# print(generate_brackets(2, 1))

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ['[[][]]', '[[]][]', '[][[]]', '[][][]']


##############

### -> -> -> USER: P38

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0) # TODO: fill this part
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                # TODO: fill this part
                new_conseq_opens = max(conseq_opens, opens + 1)
                if new_conseq_opens <= d:
                    # TODO: fill this part
                    q.append([s + "[", opens + 1, closes, new_conseq_opens])
                    
            if closes < opens:
                # TODO: fill this part
                if closes < n:
                    q.append([s + "]", opens, closes + 1, conseq_opens])
                
    return result

print(generate_brackets(3, 2))

# assert generate_brackets(2, 1) == ["[][]"]
# assert generate_brackets(2, 2) == ["[[]]", "[][]"]
# assert generate_brackets(3, 1) == ["[][][]"]
# assert generate_brackets(3, 2) == ['[[][]]', '[[]][]', '[][[]]', '[][][]']


##############

### -> -> -> USER: P39

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop()
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                result.append(s)
                new_conseq_opens = conseq_opens + 1
                
                if new_conseq_opens <= d:
                    q.append([s + '[', opens + 1, closes, new_conseq_opens + 1])
                    
            if closes < opens:
                q.append([s + ']', opens, closes + 1, 0])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ['[[][]]', '[[]][]', '[][[]]', '[][][]']


##############

### -> -> -> USER: P40

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop()
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = 1
                
                if new_conseq_opens <= d:
                    q.append([s + "[", opens + 1, closes, conseq_opens + 1])
                    new_conseq_opens += 1
                    
            if closes < opens:
                q.append([s + "]", opens, closes + 1, conseq_opens - 1])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ['[[][]]', '[[]][]', '[][[]]', '[][][]']


##############

### -> -> -> USER: P41

def generate_brackets(n: int, d: int) -> list[str]:
    
    result = []
    q = [["", 0, 0, 0]]

    while q:
        s, opens, closes, conseq_opens = q.pop(0)
        
        if opens == n and closes == n:
            result.append(s)
        else:
            if opens < n:
                new_conseq_opens = conseq_opens + 1
                if new_conseq_opens <= d:
                    q.append([s + '[', opens + 1, closes, new_conseq_opens])
                    
            if closes < opens:
                q.append([s + ']', opens, closes + 1, 0])
                
    return result

assert generate_brackets(2, 1) == ["[][]"]
assert generate_brackets(2, 2) == ["[[]]", "[][]"]
assert generate_brackets(3, 1) == ["[][][]"]
assert generate_brackets(3, 2) == ['[[][]]', '[[]][]', '[][[]]', '[][][]']


##############

