#include <cstdio>

using namespace std;

void Kreiraj(char *h,char *a,char *b,char *c,int u)
{
    char t=a[0];
    char i=0;
    while (t)
    {
        h[i]=a[i];
        i++;
        t=a[i];
    }
    char m=i;
    t=b[0];
    i=0;
    while (t)
    {
        h[m]=b[i];
        i++;
        m++;
        t=b[i];
    }
    t=c[0];
    i=0;
    while (t)
    {
        h[m]=c[i];
        i++;
        m++;
        t=c[i];
    }
    h[m]=0;
}

class Cvor
{
    char *d;
    Cvor *sl;
    Cvor *pr;
public:
    Cvor(char *b,Cvor *Pr,Cvor *Sl)
    {
        d=b;
        pr=Pr;
        sl=Sl;
    }
    void Set_pr(Cvor *Pr)
    {
        pr=Pr;
    }
    void Set_sl(Cvor *Sl)
    {
        sl=Sl;
    }
    Cvor* Get_pr()
    {
        return pr;
    }
    Cvor* Get_sl()
    {
        return sl;
    }
    char *get()
    {
        return d;
    }
    ~Cvor()
    {
        delete[] d;
    }
};

class DLista
{
    Cvor *P;
    Cvor *tr;
public:
    DLista()
    {
        P=NULL;
    }
    void Dodaj(char *niz)
    {
        if(!P)
        {
            Cvor *t=new Cvor(niz,NULL,NULL);
            P=t;
        }
        else
        {
            Cvor *t=new Cvor(niz,NULL,P);
            P->Set_pr(t);
            P=t;
            tr=P;
        }
    }
    void Oduzmi(Cvor *t)
    {
        if(t->Get_pr())
            t->Get_pr()->Set_sl(t->Get_sl());
        else
            {
                P=t->Get_sl();
                P->Set_pr(NULL);
            }
        if(t->Get_sl())
            t->Get_sl()->Set_pr(t->Get_pr());
        tr=tr->Get_sl();

    }
    char *Prolaz()
    {
        return tr->get();
    }
    void Next()
    {
        tr=tr->Get_sl();
    }
    void Ukloni()
    {
        Oduzmi(tr);
    }
    void Reset()
    {
        tr=P;
    }
    Cvor *Tr()
    {
        return tr;
    }
    void Print()
    {
        Reset();
        while(tr)
        {
            printf("%s\n",Prolaz());
            Next();
        }
    }
};

int main()
{
    char a[20],b[20],c[20],t,m,*n1,*n2,*n3,*n4,*n5,*n6;
    scanf("%c",&t);
    int i=0;
    while (t!=' ')
    {
        a[i]=t;
        scanf("%c",&t);
        i++;
    }
    m=i;
    a[i]=0;
    i=0;
    scanf("%c",&t);
    while (t!=' ')
    {
        b[i]=t;
        scanf("%c",&t);
        i++;
    }
    m+=i;
    b[i]=0;
    i=0;
    scanf("%c",&t);
    while (t!='\n')
    {
        c[i]=t;
        scanf("%c",&t);
        i++;
    }
    m+=i;
    c[i]=0;
    n1=new char[m];
    n2=new char[m];
    n3=new char[m];
    n4=new char[m];
    n5=new char[m];
    n6=new char[m];
    Kreiraj(n1,a,b,c,m);
    Kreiraj(n2,a,c,b,m);
    Kreiraj(n3,b,a,c,m);
    Kreiraj(n4,b,c,a,m);
    Kreiraj(n5,c,a,b,m);
    Kreiraj(n6,c,b,a,m);
    DLista dl1;
    dl1.Dodaj(n1);
    dl1.Dodaj(n2);
    dl1.Dodaj(n3);
    dl1.Dodaj(n4);
    dl1.Dodaj(n5);
    dl1.Dodaj(n6);
    char temp;
    for(int g=0;g<m;g++)
    {
        dl1.Reset();
        if(!(dl1.Tr()->Get_sl()))
            break;
        temp=dl1.Prolaz()[g];
        dl1.Next();
        while(dl1.Tr())
        {
            if(temp<dl1.Prolaz()[g])
                temp=dl1.Prolaz()[g];
            dl1.Next();
        }
        dl1.Reset();
        while(dl1.Tr())
        {
            if(temp>dl1.Prolaz()[g])
                dl1.Ukloni();
            else
                dl1.Next();
        }
    }
    dl1.Reset();
    printf("%s",dl1.Prolaz());
    return 0;
}