#include <fstream>
#include <cstdio>

using namespace std;
ofstream fout("vecini2.out");
int n,ok,v[30],v2[30];
char a[5005],b[5005],ch;
void completezBig(int poz)
{
    int p = 'z' - 'a';
    for(int i=poz;i<n;i++)
    {
        while(v[p]==0)
            p--;
        b[i] = p + 'a';
        v[p]--;
    }
}
void inversBig(int n)
{
    int i, j;
    int mmin = b[n-1], pmin = n-1;
    for(i=n-1;i>=0;i--)
    {
        if(b[i] > mmin) break;
        else
            if(b[i] < mmin) mmin = b[i],pmin = i;
    }
    if(i==-1)
    {
        ok = 0;
        return;
    }
    for(j=n-1;j>=pmin;j--)
        if(b[i] > b[j])
            break;
    if(j>i && j>=pmin)
    {
        ok = 2;
        b[i] = b[i] + b[j] - (b[j] = b[i]);
        for(j=i+1;j<n;j++)
            v[b[j] - 'a'] ++;
        completezBig(i+1);
    }
    else
        ok = 0;
}
void constrBig()
{
    int i,j;
    ok = 1;
    for(i=0;i<n;i++)
        if(v[a[i]-'a'] != 0)
        {
            b[i] = a[i];
            v[a[i]-'a'] --;
        }
        else
        {
            for(j=a[i]-'a';j>=0;j--)
                if(v[j]!=0)
                    break;
            if(j!=-1)
            {
                b[i] = j + 'a', v[j]--;
                completezBig(i+1);
                ok = 2;
            }
            else
            {
                for(j = a[i] - 'a' + 1;j<=25;j++)
                    if(v[j]!=0)
                        break;
                ch = j + 'a';
                for(j = i-1;j>=0;j--)
                    if(a[j] > ch)
                        break;
                if(j!=-1)
                {
                    b[i] = b[j]; b[j] = ch;
                    v[ch - 'a']--;
                    completezBig(i+1);
                    ok = 2;
                }
                else
                {
                    inversBig(i);
                }
            }
            break;
        }
}
void completezSmall(int poz)
{
    int p = 0;
    for(int i=poz;i<n;i++)
    {
        while(v2[p]==0)
            p++;
        b[i] = p + 'a';
        v2[p]--;
    }
}
void inversSmall(int n)
{
    int i, j;
    int mmax = b[n-1], pmax = n-1;
    for(i=n-1;i>=0;i--)
    {
        if(b[i] < mmax) break;
        else
            if(b[i] > mmax) mmax = b[i],pmax = i;
    }
    if(i==-1)
    {
        ok = 0;
        return;
    }
    for(j=n-1;j>=pmax;j--)
        if(b[i] < b[j])
            break;
    if(j>i && j>=pmax)
    {
        ok = 2;
        b[i] = b[i] + b[j] - (b[j] = b[i]);
        for(j = i+1;j<n;j++)
            v2[b[j]-'a'] ++;
        completezSmall(i+1);
    }
    else
        ok = 0;
}
void constrSmall()
{
    int i,j;
    ok = 1;
    for(i=0;i<n;i++)
        if(v2[a[i]-'a'] != 0)
        {
            b[i] = a[i];
            v2[a[i]-'a'] --;
        }
        else
        {
            for(j=a[i]-'a';j<=25;j++)
                if(v2[j]!=0)
                    break;
            if(j!=26)
            {
                b[i] = j + 'a', v2[j]--;
                completezSmall(i+1);
                ok = 2;
            }
            else
            {
                for(j = a[i] - 'a' -1;j>=0;j--)
                    if(v2[j]!=0)
                        break;
                ch = j + 'a';
                for(j = i-1;j>=0;j--)
                    if(a[j] < ch)
                        break;
                if(j!=-1)
                {
                    b[i] = b[j]; b[j] = ch;
                    v2[ch - 'a']--;
                    completezSmall(i+1);
                    ok = 2;
                }
                else
                    inversSmall(i);
            }
            break;
        }
}

int main()
{
    freopen("vecini2.in","r",stdin);
    scanf("%d",&n);
    scanf("%s",&a);
    scanf("%s",&b);
    for(int i=0;i<n;i++)
        v[b[i] - 'a']++,v2[b[i] - 'a']++;
    constrBig();
    if(ok == 1)
        inversBig(n);
    if(ok != 0)
        fout<<b<<'\n';
    else
        fout<<0<<'\n';
    constrSmall();
    if(ok == 1)
        inversSmall(n);
    if(ok != 0)
        fout<<b<<'\n';
    else
        fout<<0<<'\n';
    return 0;
}