思路&AC代码:

#include<iostream>
#include<string>
#include<algorithm>//为了使用reverse()把字符串反转
using namespace std;
int main()
{
    ios::sync_with_stdio(false);cin.tie(nullptr);
    int m,s;
    string num1,num2;//题目没说num1和num2不可以相等哦
    cin>>m>>s;
    if(s>9*m || s==0 && m!=1){cout<<"-1 -1\n";return 0;}//如果sum>位数*9,说明就算所有位都是9也不符合题意;不是一位数,那就不可能全是0,所以s不应该为0
    else
    {
        if(s==0){cout<<"0 0\n";return 0;}//针对0的特殊情况
        int cnt=0;
        num1.clear();//先清空字符串。不然上一个字符串的结果也会再次被输出
        while(s>=9){num1=num1+'9';s-=9;cnt++;}//一直加9,直到加不了
        if(s){num1=num1+to_string(s);cnt++;}//剩下的不是0就继续加
        int tcnt=m-cnt;//总位数减去添加了数字的次数,等于还没有数字的位数
        while(tcnt){num1=num1+'0';tcnt--;}//因为数位和已经用完了,剩下的补0
        num2=num1;//因为要先输出小的,所以不能在反转字符串过程中把num1破坏了
        reverse( num2.begin()/*num2中出现一第一个字符的地址*/,num2.end()/*num2中出现一最后一个字符的地址*/ );//reverse函数(反转起始位置,反转结束位置),别写成reserve()
        //为什么反转就行了?因为num1是从最高位开始排9,而num2刚好需要最后一位开始排9
        if(num2[0]!='0'){cout<<num2<<' ';}//第一位不等于0
        else {num2[0]='1';num2[m-cnt]--;cout<<num2<<' ';}//如果第一位为0,把第一位变成1,后面第一个不为0的索引为m-cnt。因为加了m-cnt个0,故反转后的第(m-cnt-1)+1开始就不是0了
        cout<<num1<<'\n';
    }
    
    return 0;
}