class Solution {
public:
    static bool ms(string str1,string str2){
        if(str1.size()>str2.size()){
            for(int i=0;i<str2.size();i++){
                if(str1[i]>str2[i]){
                    return false;
                }
                else if(str1[i]<str2[i]){
                    return true;
                }
            }
            return ms(str1.substr(str2.size(),str1.size()-str2.size()),str2);
        }
        else if(str1.size()<str2.size()){
            for(int i=0;i<str1.size();i++){
                if(str2[i]>str1[i]){
                    return true;
                }
                else if(str2[i]<str1[i]){
                    return false;
                }
            }
            return ms(str1,str2.substr(str1.size(),str2.size()-str1.size()));
        }
        else{
            for(int i=0;i<str1.size();i++){
                if(str2[i]>str1[i]){
                    return true;
                }
                else if(str2[i]<str1[i]){
                    return false;
                }
            }
            return false;
        }
    }
    string PrintMinNumber(vector<int> numbers) {
        string str="";
        vector<string> strs(numbers.size());
        for(int i=0;i<strs.size();i++){
            string str0="";
            if(numbers[i]==0){
                str0="0";
            }
            while(numbers[i]!=0){
                string s=" ";
                s[0]=(char)(numbers[i]%10+48);
                str0=s+str0;
                numbers[i]/=10;
            }
            strs[i]=str0;
        }
        sort(strs.begin(),strs.end(),ms);
        for(int i=0;i<strs.size();i++){
            str=str+strs[i];
        }
        return str;
    }
};