#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; }