def get_perms(s, prefix, result): if len(s) == 0: result.append(prefix) return for i in range(len(s)): new_s = s[:i] + s[i+1:] get_perms(new_s, prefix+s[i], result) if __name__ == '__main__': s = "abcd" perms = [] get_perms(s, "", perms) print(perms) next_perm = "zzzzzz" # initialize to largest lexicographical string for perm in perms: if perm == s: # ignore continue if perm > s: next_perm = perm if perm < next_perm else next_perm print(next_perm)
Standard input is empty
['abcd', 'abdc', 'acbd', 'acdb', 'adbc', 'adcb', 'bacd', 'badc', 'bcad', 'bcda', 'bdac', 'bdca', 'cabd', 'cadb', 'cbad', 'cbda', 'cdab', 'cdba', 'dabc', 'dacb', 'dbac', 'dbca', 'dcab', 'dcba'] abdc