# bulsolit-q8
# Exs for Section 63, Q.8, p.227, p.278
# https://en.wikipedia.org/wiki/Bulgarian_solitaire
# Triangular Numbers: 1, 3, 6, 10, 15, 21, ...
# inputs: 3, [5 3 2]  or  4 [5 5 3 2]

def isTriangular(n):
  if n == 0 or n == 1:
    return True
  sum = 0
  for i in range(n):
    sum += i
    if sum == n:
      return True
    if i == n:
      return False

n = int(input("n=? "))
stack = [0]*n
for i in range(n):
  stack[i] = int(input("stack[" + str(i) + "]=? "))
sum = sum(stack)
if isTriangular(sum):
  print("sum", sum, "is triangular")
else:
  print("sum", sum, "is NOT triangular")

isIncreasing = False
iter = 0; 
while not isIncreasing:
  print(iter, ":", *stack)
  iter += 1
  for i in range(n):
    stack[i] -= 1
  # n is stored in a new stack
  stack.append(n)
  n += 1   # current number of stacks
  # remove empty stacks
  i = n-1
  while i >= 0:
    if stack[i] == 0:
      stack.pop(i)
    i -= 1
  n = len(stack)
  isIncreasing = True; 
  for i in range(1, n):
    if stack[i] <= stack[i-1]:
      isIncreasing = False
      break
print(iter, ":", *stack)

