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)