#include <iostream>
using namespace std;
class Formula {
protected:
bool value;
static bool getValue(Formula& f) {
return f.value;
}
Formula(bool value) : value(value) {}
public:
void printValue() {
cout << value << endl;
}
virtual ~Formula() = 0;
};
Formula::~Formula(){}
class Proposition : public Formula {
private:
string name;
public:
Proposition(string s, bool b) : Formula(b), name(s) {}
};
class Conjunction : public Formula {
private:
Formula* l;
Formula* r;
public:
Conjunction(Formula* f1, Formula* f2) :
Formula(Formula::getValue(*f1) && Formula::getValue(*f2)), l(f1), r(f2) {}
};
int main() {
Proposition a("a", true);
Proposition b("b", false);
Conjunction c(&a, &b);
a.printValue();
b.printValue();
c.printValue();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgRm9ybXVsYSB7CnByb3RlY3RlZDoKCWJvb2wgdmFsdWU7CgoJc3RhdGljIGJvb2wgZ2V0VmFsdWUoRm9ybXVsYSYgZikgewoJCXJldHVybiBmLnZhbHVlOwoJfQoKCUZvcm11bGEoYm9vbCB2YWx1ZSkgOiB2YWx1ZSh2YWx1ZSkge30KCQpwdWJsaWM6Cgl2b2lkIHByaW50VmFsdWUoKSB7CgkJY291dCA8PCB2YWx1ZSA8PCBlbmRsOwoJfQoJCgl2aXJ0dWFsIH5Gb3JtdWxhKCkgPSAwOwp9OwoKRm9ybXVsYTo6fkZvcm11bGEoKXt9CgpjbGFzcyBQcm9wb3NpdGlvbiA6IHB1YmxpYyBGb3JtdWxhIHsKICBwcml2YXRlOgogICAgc3RyaW5nIG5hbWU7CiAgcHVibGljOgogICAgUHJvcG9zaXRpb24oc3RyaW5nIHMsIGJvb2wgYikgOiBGb3JtdWxhKGIpLCBuYW1lKHMpIHt9Cn07CgpjbGFzcyBDb25qdW5jdGlvbiA6IHB1YmxpYyBGb3JtdWxhIHsKICBwcml2YXRlOgogICAgRm9ybXVsYSogbDsKICAgIEZvcm11bGEqIHI7CiAgcHVibGljOgogICAgQ29uanVuY3Rpb24oRm9ybXVsYSogZjEsIEZvcm11bGEqIGYyKSA6CiAgICAJRm9ybXVsYShGb3JtdWxhOjpnZXRWYWx1ZSgqZjEpICYmIEZvcm11bGE6OmdldFZhbHVlKCpmMikpLCBsKGYxKSwgcihmMikge30KfTsKCmludCBtYWluKCkgewoJUHJvcG9zaXRpb24gYSgiYSIsIHRydWUpOwoJUHJvcG9zaXRpb24gYigiYiIsIGZhbHNlKTsKCUNvbmp1bmN0aW9uIGMoJmEsICZiKTsKCWEucHJpbnRWYWx1ZSgpOwoJYi5wcmludFZhbHVlKCk7CgljLnByaW50VmFsdWUoKTsKfQ==