#include <cstdlib>
#include <iostream>
#include <list>
using namespace std;

class Edge;

class Vertice
{
public:
  list <Edge> edges;           
    
  Vertice()
  {}

  friend void addEdge(Vertice ver_, Edge edg_);
};

class Edge
{
public:
  Vertice *v1;
  Vertice *v2;      
     
  Edge(Vertice *vert1, Vertice *vert2)
  {
  v1 = vert1;
  v2 = vert2;                  
  }         
};

inline void addEdge(Vertice ver_, Edge edge_)
{
  ver_.edges.push_back(edge_);
}

int main(int argc, char *argv[])
{
    Vertice *vert1, *vert2, *vert3, *vert4;
    Vertice  vert1_, vert2_, vert3_, vert4_;
    
    vert1 = &vert1_;
    vert2 = &vert2_;
    vert3 = &vert3_;
    vert4 = &vert4_;
    
    Edge edg1(vert1,vert2), edg2(vert2,vert3), edg3(vert3,vert4), 
    edg4(vert4,vert3), edg5(vert2,vert4);
    
    addEdge(vert1_, edg1);
    addEdge(vert1_, edg4);
    
    addEdge(vert2_, edg1);
    addEdge(vert2_, edg2);
    addEdge(vert2_, edg4);
    
    addEdge(vert3_, edg2);
    addEdge(vert3_, edg3);
    addEdge(vert3_, edg4);
    
    addEdge(vert4_, edg3);
    addEdge(vert4_, edg5);
    
    system("PAUSE");
    return 0;
}
