Pagini recente » Cod sursa (job #2266589) | Cod sursa (job #3132529) | Cod sursa (job #1445666) | Cod sursa (job #533655) | Cod sursa (job #2314841)
#include<iostream>
#include<stack>
#include<string.h>
#define M 30000007
#define N 3000007
using namespace std;
char A[M],B[N];
int f_a[300],f_b[300];
stack <char> s1,s2;
int main()
{
cin>>A;
cin>>B;
int n1=strlen(A);
int n2=strlen(B);
int i;
for(i=0;i<n1;i++)
{
f_a[A[i]]++;
}
for(i=0;i<n2;i++)
{
f_b[B[i]]++;
}
for(i=0;i<n1;i++)
{
if(f_b[A[i]]-f_a[A[i]]>0)
{
cout<<"impossible";
return 0;
}
}
for(i=0;i<n2;i++)
{
f_a[B[i]]--;
}
for(i=0;i<n1;i++)
{
if(f_b[A[i]]>0)
{
f_b[A[i]]--;
while(s1.top()>A[i]&&f_a[A[s1.top()]]&&s1.size()!=0)
{
f_b[s1.top()]++;
f_a[s1.top()]--;
s1.pop();
}
s1.push(A[i]);
}
else
{
f_a[A[i]]--;
}
}
while(s1.size()!=0)
{
s2.push(s1.top());
s1.pop();
}
while(s2.size()!=0)
{
cout<<s2.top();
s2.pop();
}
return 0;
}