[Python3] Search lowers, if needed binary search
python3 []\nclass Solution:\n    def splitMessage(self, message: str, limit: int) -> List[str]:\n        def cnt(x):\n            mdig_num = len(str(x))\n      
```python3 []\nclass Solution:\n    def splitMessage(self, message: str, limit: int) -> List[str]:\n        def cnt(x):\n            mdig_num = len(str(x))\n            res = sum(dig_num * (9 * 10 ** (dig_num - 1)) for dig_num in range(1, mdig_num))\n            lst = mdig_num * ((9 * 10 ** (mdig_num - 1)) - (10 ** mdig_num - x) + 1)\n            return res + lst\n\n        n = len(message)\n        # print([(x, cnt(x)) for x in range(1, 20)], (99, cnt(99)), (100, cnt(100)), (101, cnt(101)))\n        # print([(x, limit - len(str(x)) * 2 + 3 > 0, cnt(x) + n + len(str(x)) * x + 3 * x <= x * limit)\n        #         for x in (100, 964, 965, 966, 999)])\n        for l in range(1, 1001):\n            if limit - len(str(l)) * 2 + 3 > 0 and cnt(l) + n + len(str(l)) * l + 3 * l <= l * limit:\n                break\n        if not (limit - len(str(l)) * 2 + 3 > 0 and cnt(l) + n + len(str(l)) * l + 3 * l <= l * limit):\n            l, r = 1, n\n            while l < r:\n                m = (l + r) // 2\n                if limit - len(str(m)) * 2 + 3 > 0 and cnt(m) + n + len(str(m)) * m + 3 * m <= m * limit:\n                    r = m\n                else:\n                    l = m + 1\n            if not (limit - len(str(l)) * 2 + 3 > 0 and cnt(l) + n + len(str(l)) * l + 3 * l <= l * limit):\n                return []\n        ret = [None] * l\n        ll = len(str(l))\n        i = 0\n        for j in range(l):\n            left = limit - (3 + len(str(j + 1)) + ll)\n            ret[j] = f"{message[i: i + left]}<{j + 1}/{l}>"\n            i += left\n        return ret\n        \n\n```
['Python3']