#include <iostream>
using namespace std;
class Node {
private:
Node *next;
public:
virtual const Node * GetNext() const { return next; }
};
class DualNode : public Node {
private:
DualNode *prev;
public:
virtual const DualNode * GetNext() const{ return dynamic_cast< DualNode *>(const_cast< Node *>(Node::GetNext())); }
virtual const DualNode * GetPrev() const{ return prev; }
};
class ExtendedNode : public DualNode {
public:
virtual const ExtendedNode * GetNext() const{ return dynamic_cast< ExtendedNode *>(const_cast< DualNode *>(DualNode::GetNext())); }
virtual const ExtendedNode * GetPrev() const{ return dynamic_cast< ExtendedNode *>(const_cast< DualNode *>(DualNode::GetPrev())); }
};
int main(){
ExtendedNode extNode;
return 0;
}