    #include <string>
    #include <vector>

    class Graph {
    public:
        Graph( const std::string & );
        ~Graph();

        void print();

    private:

        struct GEdge;

        struct GNode
        {
            std::string currency_type;
            std::vector<GEdge> edges; // line 19

            GNode( std::string name ) : currency_type( name ) {}
        };

        struct GEdge
        {
            int weight;
            GNode * node; // node that the edge is pointed towards

            GEdge( int weight, GNode* node ) 
                : weight( weight ), node( node ) {}
        };

        GNode *source;
        std::vector<GNode> nodes;

        void add_node( const std::string & currency );
        void add_edge( const GNode *& source, const GNode *& destination, int weight );
        std::string bellman_ford( const GNode *&source );
    };

    int main()
    {

    }
