def find_next_smaller_elements(lst):
smaller_elements = [-1 for x in lst] # if not found write -1
stack = []
for i, x in enumerate(lst):
while len(stack) > 0 and x < lst[stack[-1]]:
smaller_elements[stack.pop()] = x
stack.append(i)
return smaller_elements
print(find_next_smaller_elements([5, 8, 2, 7, 4, 8, 1, 3]))
'''
run:
[2, 2, 1, 4, 1, 1, -1, -1]
'''