private BoolExpr(List <Item> literal)
 {
     _op    = BOP.LEAF;
     _left  = null;
     _right = null;
     _lit   = literal;
 }
        //
        //  private constructor
        //

        private BoolExpr(BOP op, BoolExpr left, BoolExpr right)
        {
            _op    = op;
            _left  = left;
            _right = right;
            _lit   = new List <Item>();
        }
 public BoolExpr(BoolExpr other)
 {
     // No share any object on purpose
     _op    = other._op;
     _left  = other._left == null ? null : new BoolExpr(other._left);
     _right = other._right == null ? null : new BoolExpr(other._right);
     _lit   = other.Lit;
 }