[Python3] 99% solution
Intuition\n Describe your first thoughts on how to solve this problem. \n\n# Approach\n Describe your approach to solving the problem. \n\n# Complexity\n- Time 
# Intuition\n<!-- Describe your first thoughts on how to solve this problem. -->\n\n# Approach\n<!-- Describe your approach to solving the problem. -->\n\n# Complexity\n- Time complexity:\n<!-- Add your time complexity here, e.g. $$O(n)$$ -->\n\n- Space complexity:\n<!-- Add your space complexity here, e.g. $$O(n)$$ -->\n\n# Code\n```\nclass Solution:\n    def splitMessage(self, message: str, limit: int) -> List[str]:\n        n = len(message)\n        b = self.find_b(n, limit)\n\n        if b == -1:\n            return []\n\n        return self.construct_parts(message, b, limit)\n\n    def construct_parts(self, message, b, l):\n        parts = []\n        nb = len(str(b))\n        index = 0\n\n        for i in range(1, nb+1):\n            a_start = int("1" + "".join(["0" for _ in range(i-1)]))\n            a_end = int("".join(["9" for _ in range(i)]))\n            for a in range(a_start, a_end+1):\n\n                suffix = f"<{a}/{b}>"\n                len_mes = l - len(suffix)\n                segment = message[index:index+len_mes]\n                segment = segment + suffix\n                parts.append(segment)\n                index += len_mes\n                if a >= b:\n                    return parts\n\n\n\n        \n    def find_b(self, n, l):\n        nb = 1\n\n        while True:\n            if l - (3 + nb + nb) <= 0:\n                break\n\n            # compute length of covered message for len(str(a)) < len(str(b))\n            covered_mes = 0\n            for i in range(1, nb):\n                len_suffix = 3 + nb + i\n                len_mes = l - len_suffix\n\n                num_parts = self.get_num_parts(i)\n                covered_mes += num_parts * len_mes\n\n            remain = n - covered_mes\n            len_suffix = 3 + nb + nb\n            len_mes = l - len_suffix\n            req_remain_num_parts = math.ceil(remain / len_mes)\n\n            if nb == 1:\n                req_b = req_remain_num_parts\n            else:\n                req_b = int("".join(["9" for _ in range(nb - 1)])) + req_remain_num_parts\n            max_b = int("".join(["9" for _ in range(nb)]))\n            if req_b <= max_b:\n                return req_b\n            nb += 1\n\n        return -1\n\n    def get_num_parts(self, i):\n        if i == 1:\n            return 9\n\n        hi = "".join(["9" for _ in range(i)])\n        lo = "1" + "".join(["0" for _ in range(i - 1)])\n        return int(hi) - int(lo) + 1\n```
['Python3']