# Arup Guha
# 7/18/2025
# Brute Force Code

NUMD = 2
CANDY = ["mike&ike","hundredgrand","crunch","snickers","reeces","bigtonys"]

def odometer(odom,k):

    if k == len(odom):
        print(odom)
        return

    for d in range(NUMD):

        # Put digit i in position(index) k.
        odom[k] = d

        # Recursively print all settings with k+1 digits fixed.
        odometer(odom, k+1)

def subsets(odom,k):

    if k == len(odom):

        # In here, look at odom, if 1, we print that candy, otherwise we don't.
        for i in range(len(odom)):
            if odom[i] == 1:
                print(CANDY[i], end=" ")
        print()
        return

    for d in range(2):

        # Put digit i in position(index) k.
        odom[k] = d

        # Recursively print all settings with k+1 digits fixed.
        subsets(odom, k+1)

def subsetsbits(items):

    n = len(items)

    # Mask will be each subset of items.
    for mask in range(1<<n):

        # For each item, see if it belongs to this mask or not.
        for i in range(n):
            if (mask & (1<<i)) != 0:
                print(items[i], end=" ")
        print()


def perm(items,used,k):

    if k == len(items):
        print(items)
        return

    for i in range(len(items)):

        # It's been placed, skip it.
        if used[i]:
            continue

        # Mark i as used since I am placing it.
        used[i] = True

        # Put digit i in position(index) k.
        items[k] = i

        # Recursively print all settings with k+1 digits fixed.
        perm(items, used, k+1)

        # Now, we need something different in slot k, so unmark i.
        used[i] = False

def derange(items,used,k):

    if k == len(items):
        print(items)
        return

    for i in range(len(items)):

        # It's been placed, skip it.
        # Not allowed to place k in slot k...
        if used[i] or k == i:
            continue

        # Mark i as used since I am placing it.
        used[i] = True

        # Put digit i in position(index) k.
        items[k] = i

        # Recursively print all settings with k+1 digits fixed.
        derange(items, used, k+1)

        # Now, we need something different in slot k, so unmark i.
        used[i] = False

'''
mine = [0,0,0,0,0,0]
subsets(mine, 0)
subsetsbits(CANDY)
'''
derange([0,0,0,0], [False, False, False, False], 0)
