#include #include 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=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=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=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=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