#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPHN0cmluZz4KCmNvbnN0ZXhwciBpbnQgQWRkKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSArIGI7IH0KY29uc3RleHByIGludCBTdWIoaW50IGEsIGludCBiKSB7IHJldHVybiBhIC0gYjsgfQpjb25zdGV4cHIgaW50IE11bChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgKiBiOyB9CmNvbnN0ZXhwciBpbnQgRGl2KGludCBhLCBpbnQgYikgeyByZXR1cm4gYSAvIGI7IH0KCnRlbXBsYXRlIDxjaGFyIE5hbWUsIGludCBGdW5jKGludCwgaW50KT4Kc3RydWN0IE9wZXJhdGlvbgp7CiAgICBjb25zdGV4cHIgT3BlcmF0aW9uKCkgeyB9CgogICAgY29uc3RleHByIGludCBvcGVyYXRvcigpKGludCBhLCBpbnQgYikgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gRnVuYyhhLCBiKTsKICAgIH0KCiAgICBzdGQ6OnN0cmluZyBUb1N0cmluZygpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKDEsIE5hbWUpOwogICAgfQp9OwoKdHlwZWRlZiBPcGVyYXRpb248JysnLCBBZGQ+IFBsdXM7CnR5cGVkZWYgT3BlcmF0aW9uPCctJywgU3ViPiBNaW51czsKdHlwZWRlZiBPcGVyYXRpb248JyonLCBNdWw+IE11bHRpcGxpZXM7CnR5cGVkZWYgT3BlcmF0aW9uPCcvJywgRGl2PiBEaXZpZGVzOwoKdGVtcGxhdGUgPGludCBOLCBjbGFzcy4uLiBBcmdzPgpzdHJ1Y3QgQ2hlY2sKewogICAgc3RhdGljIHZvaWQgUnVuKCkKICAgIHsKICAgICAgICBDaGVjazxOICsgMSwgUGx1cywgQXJncy4uLj46OlJ1bigpOwogICAgICAgIENoZWNrPE4gKyAxLCBNaW51cywgQXJncy4uLj46OlJ1bigpOwogICAgICAgIENoZWNrPE4gKyAxLCBNdWx0aXBsaWVzLCBBcmdzLi4uPjo6UnVuKCk7CiAgICAgICAgQ2hlY2s8TiArIDEsIERpdmlkZXMsIEFyZ3MuLi4+OjpSdW4oKTsKICAgIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFQzLCBjbGFzcyBUNCwgY2xhc3MgVDU+CnN0cnVjdCBDaGVjazw1LCBUMSwgVDIsIFQzLCBUNCwgVDU+CnsKICAgIHN0YXRpYyBjb25zdCBpbnQgUmVzdWx0ID0gVDUoKShUNCgpKFQzKCkoVDIoKShUMSgpKDEsIDIpLCAzKSwgNCksIDUpLCA2KTsKCiAgICBzdGF0aWMgdm9pZCBSdW4oKQogICAgewogICAgICAgIGlmIChSZXN1bHQgPT0gMzUpCiAgICAgICAgICAgIFByaW50KCk7CiAgICB9CgogICAgc3RhdGljIHZvaWQgUHJpbnQoKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiKCgoKCgxICIgPDwgVDEoKS5Ub1N0cmluZygpIDw8ICIgMikgIiA8PCBUMigpLlRvU3RyaW5nKCkgPDwgIiAzKSAiIDw8IFQzKCkuVG9TdHJpbmcoKSA8PCAiIDQpICIgPDwgVDQoKS5Ub1N0cmluZygpIDw8ICIgNSkgIiA8PCBUNSgpLlRvU3RyaW5nKCkgPDwgIiA2KSIgPDwgc3RkOjplbmRsOwogICAgfQp9OwoKaW50IG1haW4oKQp7CiAgICBDaGVjazwwPjo6UnVuKCk7CiAgICByZXR1cm4gMDsKfQ==