def permutations_m_to_n_str(bound_m, bound_n):
    """
    Get all permutations of digits between m and n, in string form.
    Example:
    permutations_m_to_n_str(1, 3) -> ['123', '132', '213', '231', '312', '321']
    """

    def add(perms, new_digit):
        """
        Add a digit to existing permutations.
        Assumes that all existing permutations have the same length.
        """
        # base case: no permutation so far
        if not perms:
            return [new_digit]
        # common case
        perm_length = len(perms[0])
        retlist = []
        for _perm in perms:
            new_perms = [
                (_perm[:i] + new_digit + _perm[i:]) for i in range(0, perm_length)
            ]
            new_perms.append(_perm + new_digit)
            retlist += new_perms
        return retlist

    permutations = []
    for _d in range(bound_m, bound_n + 1):
        permutations = add(permutations, str(_d))
    return permutations