Java solution using simple Math
\nclass Solution {\n    public String[] splitMessage(String message, int limit) {\n        try{\n            for(int parts=1;parts<=100000;parts++)\n           
```\nclass Solution {\n    public String[] splitMessage(String message, int limit) {\n        try{\n            for(int parts=1;parts<=100000;parts++)\n            {\n                int extralen=(3+Integer.toString(parts).length())*parts;\n                int extra=0;\n                if(parts>=10000)\n                    extra=9+90*2+900*3+9000*4+1*5;\n                else if(parts>=1000)\n                    extra=9+90*2+900*3+(parts-1000+1)*4;\n                else if(parts>=100)\n                    extra=9+90*2+(parts-100+1)*3;\n                else if(parts>=10)\n                    extra=9+(parts-10+1)*2;\n                else\n                    extra=parts;\n                extralen+=extra;\n                int totallen=extralen+message.length();\n                if((limit*(parts-1)<totallen)&&(totallen-limit*(parts-1)<=limit))\n                {\n                    String ans[]=new String[parts];\n                    int i=0;\n                    for(int currpart=0;currpart<ans.length;currpart++)\n                    {\n                        String num=Integer.toString(currpart+1);\n                        String deno=Integer.toString(parts);\n                        String suffix="<"+num+"/"+deno+">";\n                        int len=limit-suffix.length();\n                        if(currpart==ans.length-1)\n                            ans[currpart]=message.substring(i,message.length())+suffix;\n                        else\n                            ans[currpart]=message.substring(i,i+len)+suffix;\n                        i+=len;\n                    }\n                    return ans;\n                }\n            }\n        }catch(Exception e)\n        {\n            return new String[0];\n        }\n        return new String[0];\n    }\n}\n```
['Math', 'String', 'Java']