#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();
}