func_code_string: #include <bits/stdc++.h>   using namespace std;   double gen(double x, double y, double z) { return log(log(x)) + z * log(y); }   double gen(double x, double y) { return log(log(x)) + log(y); }   vector<pair<double, string> > genall(double x, double y, double z) {     vector<pair<double, string> > r;     if (x > 1.) {       r.push_back(pair<double, string>(gen(x, y, z),  x^y^z ));       r.push_back(pair<double, string>(gen(x, z, y),  x^z^y ));       r.push_back(pair<double, string>(gen(x, y * z),  (x^y)^z ));     }     if (y > 1.) {       r.push_back(pair<double, string>(gen(y, x, z),  y^x^z ));       r.push_back(pair<double, string>(gen(y, z, x),  y^z^x ));       r.push_back(pair<double, string>(gen(y, x * z),  (y^x)^z ));     }     if (z > 1.) {       r.push_back(pair<double, string>(gen(z, x, y),  z^x^y ));       r.push_back(pair<double, string>(gen(z, y, x),  z^y^x ));       r.push_back(pair<double, string>(gen(z, x * y),  (z^x)^y ));     }     return r;   }   int main() {     double x, y, z;     cin >> x >> y >> z;     if (x <= 1. && y <= 1. && z <= 1.) {       vector<pair<double, string> > r;       if (x == 1.) {         cout <<  x^y^z  << endl;         return 0;       }       if (y == 1.) {         cout <<  y^x^z  << endl;         return 0;       }       if (z == 1.) {         cout <<  z^x^y  << endl;         return 0;       }       auto v1 = genall(1. / x, y, z);       auto v2 = genall(x, 1. / y, z);       auto v3 = genall(x, y, 1. / z);       r.insert(r.end(), v1.begin(), v1.end());       r.insert(r.end(), v2.begin(), v2.end());       r.insert(r.end(), v3.begin(), v3.end());       auto it =           min_element(r.begin(), r.end(),                       [](pair<double, string> lhs, pair<double, string> rhs) {                         return lhs.first < rhs.first;                       });       cout << it->second << endl;     } else {       auto v = genall(x, y, z);       auto it =           max_element(v.begin(), v.end(),                       [](pair<double, string> lhs, pair<double, string> rhs) {                         return lhs.first < rhs.first;                       });       cout << it->second << endl;     }     return 0;   }   