/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
static String next
(Scanner s
) { do {
tok = s.next();
} while (s.hasNext() && tok.trim().length() == 0);
return tok;
}
static void require
(Scanner s,
String mustBe
) { if (!next(s).equals(mustBe)) {
}
}
StringBuilder res = new StringBuilder();
boolean first = true;
if (!first) {
res.append(delim);
} else {
first = false;
}
res.append(op);
}
return res.toString();
}
static String convertInfix
(Scanner s
) { if (tok.equals("AND") || tok.equals("OR") || tok.equals("NOT") || tok.equals("FUNC")) {
require(s, "(");
List<String> operands = new ArrayList<>();
while (true) {
operands.add(convertInfix(s));
if (delim.equals(")")) {
break;
}
}
if (tok.equals("AND")) {
return "("+merge("&&", operands)+")";
}
if (tok.equals("OR")) {
return "("+merge("||", operands)+")";
}
if (tok.equals("NOT")) {
return "!("+operands.get(0)+")";
}
// FUNC
return "FUNC("+merge(", ", operands)+")";
} else if (tok.equals("(")) {
require(s, ")");
return res;
} else {
// A <operand> B
return tok + next(s) + next(s);
}
}
Scanner scanner = new Scanner(s);
scanner.useDelimiter("\\s|\\b|(?<=[()])");
return convertInfix(scanner);
}
{
String expr
= "AND(OR((NOT(A != null)), OR(FUNC(3<4, 1==1), 1<2, FUNC(5<6, 2<3))), 2<3)"; System.
out.
println(convertInfix
(expr
)); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCQoJc3RhdGljIFN0cmluZyBuZXh0KFNjYW5uZXIgcykgewoJCVN0cmluZyB0b2s7CgkJZG8gewoJCQl0b2sgPSBzLm5leHQoKTsKCQl9IHdoaWxlIChzLmhhc05leHQoKSAmJiB0b2sudHJpbSgpLmxlbmd0aCgpID09IDApOwoJCXJldHVybiB0b2s7Cgl9CgkKCXN0YXRpYyB2b2lkIHJlcXVpcmUoU2Nhbm5lciBzLCBTdHJpbmcgbXVzdEJlKSB7CgkJaWYgKCFuZXh0KHMpLmVxdWFscyhtdXN0QmUpKSB7CgkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbnZhbGlkIHRva2VuLiIpOwoJCX0KCX0KCQoJc3RhdGljIFN0cmluZyBtZXJnZShTdHJpbmcgZGVsaW0sIExpc3Q8U3RyaW5nPiBvcGVyYW5kcykgewoJCVN0cmluZ0J1aWxkZXIgcmVzID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKCSAgICBib29sZWFuIGZpcnN0ID0gdHJ1ZTsKCQlmb3IgKFN0cmluZyBvcCA6IG9wZXJhbmRzKSB7CgkJCWlmICghZmlyc3QpIHsKCQkJICAgIHJlcy5hcHBlbmQoZGVsaW0pOwoJCQl9IGVsc2UgewoJCQkJZmlyc3QgPSBmYWxzZTsKCQkJfQoJCQlyZXMuYXBwZW5kKG9wKTsKCQl9CiAgICAgICAgcmV0dXJuIHJlcy50b1N0cmluZygpOwoJfQoJCglzdGF0aWMgU3RyaW5nIGNvbnZlcnRJbmZpeChTY2FubmVyIHMpIHsKCQlTdHJpbmcgdG9rID0gbmV4dChzKTsKCQlpZiAodG9rLmVxdWFscygiQU5EIikgfHwgdG9rLmVxdWFscygiT1IiKSB8fCB0b2suZXF1YWxzKCJOT1QiKSB8fCB0b2suZXF1YWxzKCJGVU5DIikpIHsKCQkJcmVxdWlyZShzLCAiKCIpOwoJCQlMaXN0PFN0cmluZz4gb3BlcmFuZHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKCQkJd2hpbGUgKHRydWUpIHsKCQkJCW9wZXJhbmRzLmFkZChjb252ZXJ0SW5maXgocykpOwoJCQkJU3RyaW5nIGRlbGltID0gbmV4dChzKTsKCQkJCWlmIChkZWxpbS5lcXVhbHMoIikiKSkgewoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJCWlmICh0b2suZXF1YWxzKCJBTkQiKSkgewoJCQkJcmV0dXJuICIoIittZXJnZSgiJiYiLCBvcGVyYW5kcykrIikiOwoJCQl9CgkJCWlmICh0b2suZXF1YWxzKCJPUiIpKSB7CgkJCQlyZXR1cm4gIigiK21lcmdlKCJ8fCIsIG9wZXJhbmRzKSsiKSI7CgkJCX0KCQkJaWYgKHRvay5lcXVhbHMoIk5PVCIpKSB7CgkJCQlyZXR1cm4gIiEoIitvcGVyYW5kcy5nZXQoMCkrIikiOwoJCQl9CgkJCS8vIEZVTkMKCQkJcmV0dXJuICJGVU5DKCIrbWVyZ2UoIiwgIiwgb3BlcmFuZHMpKyIpIjsKCQl9IGVsc2UgaWYgKHRvay5lcXVhbHMoIigiKSkgewoJCQlTdHJpbmcgcmVzID0gY29udmVydEluZml4KHMpOwoJCQlyZXF1aXJlKHMsICIpIik7CgkJCXJldHVybiByZXM7CgkJfSBlbHNlIHsKCQkJLy8gQSA8b3BlcmFuZD4gQgoJCQlyZXR1cm4gdG9rICsgbmV4dChzKSArIG5leHQocyk7CgkJfQoJfQoJCglzdGF0aWMgU3RyaW5nIGNvbnZlcnRJbmZpeChTdHJpbmcgcykgewoJICAgIFNjYW5uZXIgc2Nhbm5lciA9IG5ldyBTY2FubmVyKHMpOwoJICAgIHNjYW5uZXIudXNlRGVsaW1pdGVyKCJcXHN8XFxifCg/PD1bKCldKSIpOwoJICAgIHJldHVybiBjb252ZXJ0SW5maXgoc2Nhbm5lcik7Cgl9CgkKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCVN0cmluZyBleHByID0gIkFORChPUigoTk9UKEEgIT0gbnVsbCkpLCBPUihGVU5DKDM8NCwgMT09MSksIDE8MiwgRlVOQyg1PDYsIDI8MykpKSwgMjwzKSI7CgkJU3lzdGVtLm91dC5wcmludGxuKGNvbnZlcnRJbmZpeChleHByKSk7Cgl9Cn0=