#include <iostream>
#include <functional>
#include <string>

constexpr int Add(int a, int b) { return a + b; }
constexpr int Sub(int a, int b) { return a - b; }
constexpr int Mul(int a, int b) { return a * b; }
constexpr int Div(int a, int b) { return a / b; }

template <char Name, int Func(int, int)>
struct Operation
{
    constexpr Operation() { }

    constexpr int operator()(int a, int b) const
    {
        return Func(a, b);
    }

    std::string ToString() const
    {
        return std::string(1, Name);
    }
};

typedef Operation<'+', Add> Plus;
typedef Operation<'-', Sub> Minus;
typedef Operation<'*', Mul> Multiplies;
typedef Operation<'/', Div> Divides;

template <int N, class... Args>
struct Check
{
    static void Run()
    {
        Check<N + 1, Plus, Args...>::Run();
        Check<N + 1, Minus, Args...>::Run();
        Check<N + 1, Multiplies, Args...>::Run();
        Check<N + 1, Divides, Args...>::Run();
    }
};

template <class T1, class T2, class T3, class T4, class T5>
struct Check<5, T1, T2, T3, T4, T5>
{
    static const int Result = T5()(T4()(T3()(T2()(T1()(1, 2), 3), 4), 5), 6);

    static void Run()
    {
        if (Result == 35)
            Print();
    }

    static void Print()
    {
        std::cout << "(((((1 " << T1().ToString() << " 2) " << T2().ToString() << " 3) " << T3().ToString() << " 4) " << T4().ToString() << " 5) " << T5().ToString() << " 6)" << std::endl;
    }
};

int main()
{
    Check<0>::Run();
    return 0;
}