#include <iostream>
#include <cstring>
using namespace std;
string a, b;
const int N = 100010 ;
int p[ 2 * N] ;
int m, n, c;
void getnext1 ( )
{
memset ( p, - 1 , sizeof p) ;
int j= - 1 , i= 0 ;
while ( i< m)
{
if ( j== - 1 || b[ i] == b[ j] ) p[ ++ i] = ++ j;
else j= p[ j] ;
}
}
void getnext2 ( )
{
memset ( p, - 1 , sizeof p) ;
int j= - 1 , i= 0 ;
while ( i< m)
{
if ( j== - 1 || a[ i] == a[ j] ) p[ ++ i] = ++ j;
else j= p[ j] ;
}
}
int kmp1 ( )
{
int j= 0 , i= 0 ;
while ( i< n)
{
if ( j== - 1 || a[ i] == b[ j] ) {
i++ , j++ ;
}
else j= p[ j] ;
}
return j;
}
int kmp2 ( )
{
int j= 0 , i= 0 ;
while ( i< m)
{
if ( j== - 1 || b[ i] == a[ j] ) {
i++ , j++ ;
}
else j= p[ j] ;
}
return j;
}
int main ( )
{
ios:: sync_with_stdio ( false ) ;
cin. tie ( 0 ) ; cout. tie ( 0 ) ;
while ( cin>> a>> b)
{
m= b. size ( ) ;
n= a. size ( ) ;
getnext1 ( ) ;
int t1= kmp1 ( ) ;
getnext2 ( ) ;
int t2= kmp2 ( ) ;
if ( t1> t2)
{
b= b. erase ( 0 , t1) ;
cout<< a<< b<< endl;
}
else if ( t1< t2)
{
a= a. erase ( 0 , t2) ;
cout<< b<< a<< endl;
}
else if ( t1== t2&& t1&& t2)
{
if ( a> b)
{
a= a. erase ( 0 , t1) ;
cout<< b<< a<< endl;
}
else
{
b= b. erase ( 0 , t1) ;
cout<< a<< b<< endl;
}
}
else
{
cout<< min ( a+ b, b+ a) << endl;
}
}
return 0 ;
}