#include <algorithm>
#include <iostream>
#include <iterator>
#include <map>
#include <string>
using namespace std;
int main() {
map<string, string> interpolate = { { "F"s, "a && b && c"s }, { "H"s, "p ^ 2 + w"s }, { "K"s, "H > 10 || e < 5"s }, { "J"s, "F && !K"s } };
for(const auto& i : interpolate) for_each(begin(interpolate), end(interpolate), [&](auto& it){ for(auto pos = it.second.find(i.first); pos != string::npos; pos = it.second.find(i.first, pos)) it.second.replace(pos, i.first.size(), '(' + i.second + ')'); });
for(const auto& i : interpolate) cout << i.first << " : " << i.second << endl;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxzdHJpbmc+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKSB7CgltYXA8c3RyaW5nLCBzdHJpbmc+IGludGVycG9sYXRlID0geyB7ICJGInMsICJhICYmIGIgJiYgYyJzIH0sIHsgIkgicywgInAgXiAyICsgdyJzIH0sIHsgIksicywgIkggPiAxMCB8fCBlIDwgNSJzIH0sIHsgIkoicywgIkYgJiYgIUsicyB9IH07CgkKCWZvcihjb25zdCBhdXRvJiBpIDogaW50ZXJwb2xhdGUpIGZvcl9lYWNoKGJlZ2luKGludGVycG9sYXRlKSwgZW5kKGludGVycG9sYXRlKSwgWyZdKGF1dG8mIGl0KXsgZm9yKGF1dG8gcG9zID0gaXQuc2Vjb25kLmZpbmQoaS5maXJzdCk7IHBvcyAhPSBzdHJpbmc6Om5wb3M7IHBvcyA9IGl0LnNlY29uZC5maW5kKGkuZmlyc3QsIHBvcykpIGl0LnNlY29uZC5yZXBsYWNlKHBvcywgaS5maXJzdC5zaXplKCksICcoJyArIGkuc2Vjb25kICsgJyknKTsgfSk7CgkKCWZvcihjb25zdCBhdXRvJiBpIDogaW50ZXJwb2xhdGUpIGNvdXQgPDwgaS5maXJzdCA8PCAiIDogIiA8PCBpLnNlY29uZCA8PCBlbmRsOwp9