import java.util.*;
import java.lang.*;
import java.io.*;
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
class Ideone
{
// single : x -> [x]
{
for (String str
: input.
split(" ")) {
out += " ";
if(str.matches("[0-9]+"))
{
out += "["+str+"]";
}
else
{
out += str;
}
}
return out.substring(1);
}
// range : {start,end,step} -> [x,..,y]
{
int a,b,c;
int i=0;
for (String str
: input.
split(" ")) {
out += " ";
if(str.matches("\\{[0-9]+,[0-9]+,[0-9]+\\}"))
{
str = str.replaceAll("[\\{\\}]","");
a
= Integer.
parseInt(str.
split(",")[0]); b
= Integer.
parseInt(str.
split(",")[1]); c
= Integer.
parseInt(str.
split(",")[2]);
out += "["+a;
while ((a+=c) <= b) out += ","+a;
out += "]";
}
else
{
out += str;
}
}
return out.substring(1);
}
{
String input
= "3 * [3,2] / {0,2,1}"; System.
out.
println(" input = "+input
); input = expandSingle(input);
input = expandRange(input);
System.
out.
println(" expand = "+input
); evaluate(input);
}
{
int i = 0, j = 0;
ArrayList<String> in = new ArrayList<String>();
ArrayList<String> out = new ArrayList<String>();
// map sets
for (String str
: input.
split(" ")) {
if(str.matches("\\[[0-9,]+\\]"))
{
set.add(str.replaceAll("[\\[\\]]","").split(","));
t+=" $"+i++;
}
else t+=" "+str;
}
in.add(t.substring(1));
// generate expressions
while (j<i)
{
out.clear();
{
{
out.add(exp.replace("$"+j,sub));
}
}
in.clear();
in.addAll(out);
j++;
}
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
// print expressions
{
System.
out.
println(" "+exp
+" = "+engine.
eval(exp
).
toString().
replace("Infinity",
"NaN")); }
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgppbXBvcnQgamF2YXguc2NyaXB0LlNjcmlwdEVuZ2luZU1hbmFnZXI7CmltcG9ydCBqYXZheC5zY3JpcHQuU2NyaXB0RW5naW5lOwoKY2xhc3MgSWRlb25lCnsKCS8vIHNpbmdsZSA6IHggLT4gW3hdCglwdWJsaWMgc3RhdGljIFN0cmluZyBleHBhbmRTaW5nbGUgKFN0cmluZyBpbnB1dCkKCXsKCQlTdHJpbmcgb3V0ID0gIiI7CgkJZm9yIChTdHJpbmcgc3RyIDogaW5wdXQuc3BsaXQoIiAiKSkKCQl7CgkJCW91dCArPSAiICI7CgkJCWlmKHN0ci5tYXRjaGVzKCJbMC05XSsiKSkKCQkJewoJCQkJb3V0ICs9ICJbIitzdHIrIl0iOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJb3V0ICs9IHN0cjsKCQkJfQoJCX0KCQlyZXR1cm4gb3V0LnN1YnN0cmluZygxKTsKCX0KCQoJLy8gcmFuZ2UgOiB7c3RhcnQsZW5kLHN0ZXB9IC0+IFt4LC4uLHldCglwdWJsaWMgc3RhdGljIFN0cmluZyBleHBhbmRSYW5nZSAoU3RyaW5nIGlucHV0KQoJewoJCVN0cmluZyBvdXQgPSAiIjsKCQlpbnQgYSxiLGM7CgkJaW50IGk9MDsKCQlmb3IgKFN0cmluZyBzdHIgOiBpbnB1dC5zcGxpdCgiICIpKQoJCXsKCQkJb3V0ICs9ICIgIjsKCQkJaWYoc3RyLm1hdGNoZXMoIlxce1swLTldKyxbMC05XSssWzAtOV0rXFx9IikpCgkJCXsKCQkJCXN0ciA9IHN0ci5yZXBsYWNlQWxsKCJbXFx7XFx9XSIsIiIpOwoJCQkJYSA9IEludGVnZXIucGFyc2VJbnQoc3RyLnNwbGl0KCIsIilbMF0pOwoJCQkJYiA9IEludGVnZXIucGFyc2VJbnQoc3RyLnNwbGl0KCIsIilbMV0pOwoJCQkJYyA9IEludGVnZXIucGFyc2VJbnQoc3RyLnNwbGl0KCIsIilbMl0pOwoJCQkJCgkJCQlvdXQgKz0gIlsiK2E7CgkJCQl3aGlsZSAoKGErPWMpIDw9IGIpIG91dCArPSAiLCIrYTsKCQkJCW91dCArPSAiXSI7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlvdXQgKz0gc3RyOwoJCQl9CgkJfQoJCXJldHVybiBvdXQuc3Vic3RyaW5nKDEpOwoJfQoJCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQlTdHJpbmcgaW5wdXQgPSAiMyAqIFszLDJdIC8gezAsMiwxfSI7CgkJU3lzdGVtLm91dC5wcmludGxuKCIgaW5wdXQgPSAiK2lucHV0KTsKCQlpbnB1dCA9IGV4cGFuZFNpbmdsZShpbnB1dCk7CgkJaW5wdXQgPSBleHBhbmRSYW5nZShpbnB1dCk7CgkJU3lzdGVtLm91dC5wcmludGxuKCIgZXhwYW5kID0gIitpbnB1dCk7CgkJZXZhbHVhdGUoaW5wdXQpOwoJfQoJCglwdWJsaWMgc3RhdGljIHZvaWQgZXZhbHVhdGUgKFN0cmluZyBpbnB1dCkgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQlpbnQgaSA9IDAsIGogPSAwOwoJCVN0cmluZyB0ID0gIiI7CgkJQXJyYXlMaXN0PFN0cmluZ1tdPiBzZXQgPSBuZXcgQXJyYXlMaXN0PFN0cmluZ1tdPigpOwoJCUFycmF5TGlzdDxTdHJpbmc+IGluID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CgkJQXJyYXlMaXN0PFN0cmluZz4gb3V0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CgkJCgkJLy8gbWFwIHNldHMKCQlmb3IgKFN0cmluZyBzdHIgOiBpbnB1dC5zcGxpdCgiICIpKQoJCXsKCQkJaWYoc3RyLm1hdGNoZXMoIlxcW1swLTksXStcXF0iKSkKCQkJewoJCQkJc2V0LmFkZChzdHIucmVwbGFjZUFsbCgiW1xcW1xcXV0iLCIiKS5zcGxpdCgiLCIpKTsKCQkJCXQrPSIgJCIraSsrOwoJCQl9CgkJCWVsc2UgdCs9IiAiK3N0cjsKCQl9CgkJaW4uYWRkKHQuc3Vic3RyaW5nKDEpKTsKCQkKCQkvLyBnZW5lcmF0ZSBleHByZXNzaW9ucwoJCXdoaWxlIChqPGkpCgkJewoJCQlvdXQuY2xlYXIoKTsKCQkJZm9yIChTdHJpbmcgZXhwIDogaW4pCgkJCXsKCQkJCWZvciAoU3RyaW5nIHN1YiA6IHNldC5nZXQoaikpCgkJCQl7CgkJCQkJb3V0LmFkZChleHAucmVwbGFjZSgiJCIraixzdWIpKTsKCQkJCX0KCQkJfQoJCQlpbi5jbGVhcigpOwoJCQlpbi5hZGRBbGwob3V0KTsKCQkJaisrOwoJCX0KCQkKCQlTY3JpcHRFbmdpbmVNYW5hZ2VyIG1nciA9IG5ldyBTY3JpcHRFbmdpbmVNYW5hZ2VyKCk7CiAgICAJU2NyaXB0RW5naW5lIGVuZ2luZSA9IG1nci5nZXRFbmdpbmVCeU5hbWUoIkphdmFTY3JpcHQiKTsKCQkKCQkvLyBwcmludCBleHByZXNzaW9ucwoJCWZvciAoU3RyaW5nIGV4cCA6IGluKQoJCXsKCQkJU3lzdGVtLm91dC5wcmludGxuKCIgIitleHArIiA9ICIrZW5naW5lLmV2YWwoZXhwKS50b1N0cmluZygpLnJlcGxhY2UoIkluZmluaXR5IiwiTmFOIikpOwoJCX0KCX0KfQo=