//NAME              :   Jack Langejans
//SCHOOL            :   Kalamazoo AMSC
//DIVISION          :   Senior 5
//CONTEST           :   Round #3
//PROGRAM           :   Veitch
//DATE              :   February 2020

#include 
#include 
#include 
#include 
#include 
#include 

using namespace std; 
string map[4][4][2];

string hex_to_bin(char hex)
{
    switch(toupper(hex))
    {
        case '0': return "0000";
        case '1': return "0001";
        case '2': return "0010";
        case '3': return "0011";
        case '4': return "0100";
        case '5': return "0101";
        case '6': return "0110";
        case '7': return "0111";
        case '8': return "1000";
        case '9': return "1001";
        case 'A': return "1010";
        case 'B': return "1011";
        case 'C': return "1100";
        case 'D': return "1101";
        case 'E': return "1110";
        case 'F': return "1111";
    }
    return "";
}

bool check(string key1, string key2, string key3, string key4)
{
    bool valid = true;
    for(int i = 0; i < 4; i++)
    {
        for(int j = 0; j < 4; j++)
        {
            size_t x1 = map[i][j][1].find(key1);
            size_t x2 = map[i][j][1].find(key2);
            size_t x3 = map[i][j][1].find(key3);
            size_t x4 = map[i][j][1].find(key4);

            bool k1 = 0, k2 = 0, k3 = 0, k4 = 0;
            if(key1 == "" or x1 != string::npos) k1 = 1;
            if(key2 == "" or x2 != string::npos) k2 = 1;
            if(key3 == "" or x3 != string::npos) k3 = 1;
            if(key4 == "" or x4 != string::npos) k4 = 1;

            if(k1 and k2 and k3 and k4)
            {
                if(map[i][j][0] != "1")
                {
                    return false;
                }  
            }
        }
        //cout << endl;
    }
    return valid;
}

void remove(string key1, string key2, string key3, string key4)
{
    //bool valid = true;
    for(int i = 0; i < 4; i++)
    {
        for(int j = 0; j < 4; j++)
        {
            size_t x1 = map[i][j][1].find(key1);
            size_t x2 = map[i][j][1].find(key2);
            size_t x3 = map[i][j][1].find(key3);
            size_t x4 = map[i][j][1].find(key4);

            bool k1 = 0, k2 = 0, k3 = 0, k4 = 0;
            if(key1 == "" or x1 != string::npos) k1 = 1;
            if(key2 == "" or x2 != string::npos) k2 = 1;
            if(key3 == "" or x3 != string::npos) k3 = 1;
            if(key4 == "" or x4 != string::npos) k4 = 1;

            if(k1 and k2 and k3 and k4)
            {
                map[i][j][0] = "0";
            }
        }
        //cout << endl;
    }
    //return valid;
}


int main() 
{
    ifstream cin ("3sr_testdata.txt");
    cout << "Jack Langejans\nC3 Veitch Sr\n\n";

    for(int runs = 0; runs < 5; runs++)
    {
        string hex_inp = "";

        cin >> hex_inp;
        
        for(int i = 0; i < 4; i++)
        {
            string bin_inp;
            bin_inp = hex_to_bin(hex_inp[i]);

            for(int j = 0; j < 4; j++)
            {
                map[i][j][0] = bin_inp[j];
            }
        }
        /*for(int i = 0; i < 4; i++)
        {
            for(int j = 0; j < 4; j++)
            {
                cout << map[i][j][0] << " ";
            }
            cout << endl;
        }*/

        map[0][0][1] = "-A-B~C~D";
        map[0][1][1] = "-A-B-C~D";
        map[0][2][1] = "~A-B-C~D";
        map[0][3][1] = "~A-B~C~D";
        map[1][0][1] = "-A-B~C-D";
        map[1][1][1] = "-A-B-C-D";
        map[1][2][1] = "~A-B-C-D";
        map[1][3][1] = "~A-B~C-D";
        map[2][0][1] = "-A~B~C-D";
        map[2][1][1] = "-A~B-C-D";
        map[2][2][1] = "~A~B-C-D";
        map[2][3][1] = "~A~B~C-D";
        map[3][0][1] = "-A~B~C~D";
        map[3][1][1] = "-A~B-C~D";
        map[3][2][1] = "~A~B-C~D";
        map[3][3][1] = "~A~B~C~D";

        /*for(int i = 0; i < 4; i++)
        {
            for(int j = 0; j < 4; j++)
            {
                cout << map[i][j][1] << " ";
            }
            cout << endl;
        }*/
        string res = "";

        //Rule 1
        if(check("-B", "", "", ""))
        {
            remove("-B", "", "", "");
            res += "B+";
        }
        if(check("-D", "", "", ""))
        {
            remove("-D", "", "", "");
            res += "D+";
        }
        if(check("~B", "", "", ""))
        {
            remove("~B", "", "", "");
            res += "~B+";
        }
        if(check("-A", "", "", ""))
        {
            remove("-A", "", "", "");
            res += "A+";
        }
        if(check("-C", "", "", ""))
        {
            remove("-C", "", "", "");
            res += "C+";
        }
        if(check("~A", "", "", ""))
        {
            remove("~A", "", "", "");
            res += "~A+";
        }
        if(check("~D", "", "", ""))
        {
            remove("~D", "", "", "");
            res += "~D+";
        }
        if(check("~C", "", "", ""))
        {
            remove("~C", "", "", "");
            res += "~C+";
        }

        //Rule 2
        if(check("-B", "~D", "", ""))
        {
            remove("-B", "~D", "", "");
            res += "B~D+";
        }
        if(check("-B", "-D", "", ""))
        {
            remove("-B", "-D", "", "");
            res += "BD+";
        }
        if(check("~B", "-D", "", ""))
        {
            remove("~B", "-D", "", "");
            res += "~BD+";
        }
        if(check("~B", "~D", "", ""))
        {
            remove("~B", "~D", "", "");
            res += "~B~D+";
        }
        if(check("-A", "~C", "", ""))
        {
            remove("-A", "~C", "", "");
            res += "A~C+";
        }
        if(check("-A", "-C", "", ""))
        {
            remove("-A", "-C", "", "");
            res += "AC+";
        }
        if(check("~A", "-C", "", ""))
        {
            remove("~A", "-C", "", "");
            res += "~AC+";
        }
        if(check("~A", "~C", "", ""))
        {
            remove("~A", "~C", "", "");
            res += "~A~C+";
        }
        if(check("-A", "-B", "", ""))
        {
            remove("-A", "-B", "", "");
            res += "AB+";
        }
        if(check("-B", "-C", "", ""))
        {
            remove("-B", "-C", "", "");
            res += "BC+";
        }
        if(check("~A", "-B", "", ""))
        {
            remove("~A", "-B", "", "");
            res += "~AB+";
        }
        if(check("-A", "-D", "", ""))
        {
            remove("-A", "-D", "", "");
            res += "AD+";
        }
        if(check("-C", "-D", "", ""))
        {
            remove("-C", "-D", "", "");
            res += "CD+";
        }
        if(check("~A", "-D", "", ""))
        {
            remove("~A", "-D", "", "");
            res += "~AD+";
        }
        if(check("-A", "~B", "", ""))
        {
            remove("-A", "~B", "", "");
            res += "A~B+";
        }
        if(check("~B", "-C", "", ""))
        {
            remove("~B", "-C", "", "");
            res += "~BC+";
        }
        if(check("~A", "~B", "", ""))
        {
            remove("~A", "~B", "", "");
            res += "~A~B+";
        }

        //Rule 3
        if(check("-B", "~C", "", ""))
        {
            remove("-B", "~C", "", "");
            res += "B~C+";
        }
        if(check("~C", "-D", "", ""))
        {
            remove("~C", "-D", "", "");
            res += "~CD+";
        }
        if(check("~B", "~C", "", ""))
        {
            remove("~B", "~C", "", "");
            res += "~B~C+";
        }
        if(check("-A", "~D", "", ""))
        {
            remove("-A", "~D", "", "");
            res += "A~D+";
        }
        if(check("-C", "~D", "", ""))
        {
            remove("-C", "~D", "", "");
            res += "C~D+";
        }
        if(check("~A", "~D", "", ""))
        {
            remove("~A", "~D", "", "");
            res += "~A~D+";
        }

        //Rule 4
        if(check("~C", "~D", "", ""))
        {
            remove("~C", "~D", "", "");
            res += "~C~D+";
        }

        //Rule 5
        if(check("-A", "-B", "~D", ""))
        {
            remove("-A","-B", "~D", "");
            res += "AB~D+";
        }
        if(check("-C", "-B", "~D", ""))
        {
            remove("-C","-B", "~D", "");
            res += "BC~D+";
        }
        if(check("~A", "-B", "~D", ""))
        {
            remove("~A","-B", "~D", "");
            res += "~AB~D+";
        }
        if(check("-A", "-B", "-D", ""))
        {
            remove("-A","-B", "-D", "");
            res += "ABD+";
        }
        if(check("-C", "-B", "-D", ""))
        {
            remove("-C","-B", "-D", "");
            res += "BCD+";
        }
        if(check("~A", "-B", "-D", ""))
        {
            remove("~A","-B", "-D", "");
            res += "~ABD+";
        }
        if(check("-A", "~B", "-D", ""))
        {
            remove("-A","~B", "-D", "");
            res += "A~BD+";
        }
        if(check("-C", "~B", "-D", ""))
        {
            remove("-C","~B", "-D", "");
            res += "~BCD+";
        }
        if(check("~A", "~B", "-D", ""))
        {
            remove("~A","~B", "-D", "");
            res += "~A~BD+";
        }
        if(check("-A", "~B", "~D", ""))
        {
            remove("-A","~B", "~D", "");
            res += "A~B~D+";
        }
        if(check("-C", "~B", "~D", ""))
        {
            remove("-C","~B", "~D", "");
            res += "~BC~D+";
        }
        if(check("~A", "~B", "~D", ""))
        {
            remove("~A","~B", "~D", "");
            res += "~A~B~D+";
        }

        if(check("-A", "~C", "-B", ""))
        {
            remove("-A","~C", "-B", "");
            res += "AB~C+";
        }
        if(check("-A", "~C", "-D", ""))
        {
            remove("-A","~C", "-D", "");
            res += "A~CD+";
        }
        if(check("-A", "~C", "~B", ""))
        {
            remove("-A","~C", "~B", "");
            res += "A~B~C+";
        }
        if(check("-A", "-C", "-B", ""))
        {
            remove("-A","-C", "-B", "");
            res += "ABC+";
        }
        if(check("-A", "-C", "-D", ""))
        {
            remove("-A","-C", "-D", "");
            res += "ACD+";
        }
        if(check("-A", "-C", "~B", ""))
        {
            remove("-A","-C", "~B", "");
            res += "A~BC+";
        }

        if(check("~A", "-C", "-B", ""))
        {
            remove("~A","-C", "-B", "");
            res += "~ABC+";
        }
        if(check("~A", "-C", "-D", ""))
        {
            remove("~A","-C", "-D", "");
            res += "~ACD+";
        }
        if(check("~A", "-C", "~B", ""))
        {
            remove("~A","-C", "~B", "");
            res += "~A~BC+";
        }
        if(check("~A", "~C", "-B", ""))
        {
            remove("~A","~C", "-B", "");
            res += "~AB~C+";
        }
        if(check("~A", "~C", "-D", ""))
        {
            remove("~A","~C", "-D", "");
            res += "~A~CD+";
        }
        if(check("~A", "~C", "~B", ""))
        {
            remove("~A","~C", "~B", "");
            res += "~A~B~C+";
        }
        
        //Rule 6
        if(check("-B", "~C", "~D", ""))
        {
            remove("-B", "~C", "~D", "");
            res += "B~C~D+";
        }
        if(check("-B", "~C", "-D", ""))
        {
            remove("-B", "~C", "-D", "");
            res += "B~CD+";
        }
        if(check("~B", "~C", "-D", ""))
        {
            remove("~B", "~C", "-D", "");
            res += "~B~CD+";
        }
        if(check("~B", "~C", "~D", ""))
        {
            remove("~B", "~C", "~D", "");
            res += "~B~C~D+";
        }
        if(check("-A", "~C", "~D", ""))
        {
            remove("-A", "~C", "~D", "");
            res += "A~C~D+";
        }
        if(check("-A", "-C", "~D", ""))
        {
            remove("-A", "-C", "~D", "");
            res += "AC~D+";
        }
        if(check("~A", "-C", "~D", ""))
        {
            remove("~A", "-C", "~D", "");
            res += "~AC~D+";
        }
        if(check("~A", "~C", "~D", ""))
        {
            remove("~A", "~C", "~D", "");
            res += "~A~C~D+";
        }
        for(int i = 0; i < 4; i++)
        {
            for(int j = 0; j < 4; j++)
            {
                if((map[i][j][0]) == "1")
                {
                    string temp = map[i][j][1];
                    temp.erase(std::remove(temp.begin(), temp.end(),'-'), temp.end());
                    res += temp + "+";
                }
            }
        }
        res = res.substr(0, res.length()-1);
        cout <<  res << endl;
    }
}