#include <algorithm>
#include <cstddef>
#include <string>
class Solution {
  public:
    static bool cmp(int a, int b) {
        string str1 = to_string(a);
        string str2 = to_string(b);
        cout<<str1 <<" " <<str2<<endl;
        int len1 = str1.size();
        int len2 = str2.size();
        if (len1 == len2) return str1 >str2;//这个的意思表示str1大就排在前面

        else if (len1 > len2)  {
            string temp = str1.substr(0, len2);
            string temp2 = str1.substr(len2, str1.size());
            if (temp == str2&& temp2 < str2 ) {
                return false;//也就是让str2放在前面
            } 
        } else {
            string temp = str2.substr(0, len1);
            string temp2 = str2.substr(len1, str2.size());
            if (temp == str1 && temp2 < str1) {
                return true;//也就是让str1在前面
            }
        }
        return str1 > str2; 

    }
    string solve(vector<int>& nums) {
        // write code here
        //得自定义排序方法,如果位数相同则字典序大的就大,当位数不同,则位数少的与位数大的前部分相同,则返回位数低的,若位数低的与位数高的前部分不相同就返回字典序(这里的字典序指的是左往右进行比较)
        int n = nums.size();
        sort(nums.begin(), nums.end(), cmp);
        string ans;
        for (int i = 0; i < n; i++) ans += to_string(nums[i]);
        int i = 0;
        while(ans[i] == '0'&& i< n - 1)i++;
        ans = ans.substr(i , ans.size());

        return ans;
    }
};