#include <iostream>
using namespace std;

template <typename T> class RedBlackNode{
protected:
    union RedBlackPointer{
        RedBlackPointer() : node(0) { }  // <==== default constructor
        RedBlackNode *node;
        struct{
            unsigned value:1;   // for color / other info
        }flag;
    }left, right, parent;
    T key;
public:
    void initialize(T key, RedBlackPointer left = RedBlackPointer(), //refer to default ctor
            RedBlackPointer right = RedBlackPointer(),
            RedBlackPointer parent = RedBlackPointer()){
        this->key = key;
        this->left = left; this->right = right;
        this->parent = parent;
    }
    void show() {
        cout<<left.node<<","<<right.node<<","<<parent.node<<","<<key<<endl;
    }
};

int main() {
	RedBlackNode<int> N; 
	N.initialize(5); 
	N.show();
	// your code goes here
	return 0;
}