def get_next_perm(p):
n = len(p)
i = n - 1
while (i - 1) >= 0 and p[i - 1] > p[i]:
i -= 1
if i == 0:
return p
# this lookup may be optimized
j = n - 1
while p[j] <= p[i - 1]:
j -= 1
p[i - 1], p[j] = p[j], p[i - 1]
# reverse i..n-1
k = n - 1
while i < k:
p[i], p[k] = p[k], p[i]
i += 1
k -= 1
return p
def value(p):
return "".join(p)
if __name__ == "__main__":
perm = "1 2 3 4 5".split()
print(value(perm))
old = []
while True:
old = perm[:]
perm = get_next_perm(perm)
if perm < old:
print("%d %d!" % (value(perm), value(old)))
break
elif perm == old:
break
print(value(perm))