def next_permutation(arr):
    #https://w...content-available-to-author-only...i.io/page/next-lexicographical-permutation-algorithm
	i = len(arr) - 1
	while i > 0 and arr[i - 1] >= arr[i]:
		i -= 1
	if i <= 0:
		return False

	j = len(arr) - 1
	while arr[j] <= arr[i - 1]:
		j -= 1
	arr[i - 1], arr[j] = arr[j], arr[i - 1]

	arr[i : ] = arr[len(arr) - 1 : i - 1 : -1]
	return True

def partitions(Sum, K, lst, Minn = 0):
    if K == 0:
        if Sum == 0:
            print("src partition: ", lst)  # [3, 1, 0] denotes three zeros and one 1
            arr = []
            for i in range(len(lst)):
                if lst[i]:
                    arr.extend([i]*lst[i])
            print(arr)
            while next_permutation(arr):
                print(arr)
        return
    for i in range(Minn, min(Sum + 1, Sum + 1)):
        partitions(Sum - i, K - 1, [i] + lst, i)

b = 4
n = 5
partitions(n, b, [])