#include <iostream>
#include <fstream>
#include <vector>
#include <sstream>
#include <stdlib.h>

using namespace std;

// Vertex class
class Vertex {
public:
  string label; int number; int degree;

  Vertex() {
    label = "";
    number = -1;
    degree = 0;
  }

  Vertex(string l, int x) {
    label = l; number = x; degree = 0;
  }

  void print() {
    cout << number << ": " << label << "  (deg = " << degree << ")" << endl;
  }
};


// Edge class
class Edge {
public:
  int src, dst, w;

  Edge() {
    src = dst = -1; w = 0;
  }

  Edge(int s, int d, int weight) {
    src = s; dst = d; w = weight;
  }

  void print() {
    cout << "(" << src << ", " << dst << ", w=" << w << ")" << endl;
  }
};


class Graph {
private:
public:
  int n; // # of vertices
  vector<Vertex> V;
  vector<Edge> E;
  
  Graph(const char *filename) {
    ifstream in(filename);
    if (! in.good()) {
      cerr << "Unable to open file " << filename << endl;
      exit(0);
    }

    char line[1000];

    // assuming first line has the # vertices
    in >> n;
    in.getline(line, 999); // consume the \n character

    // read in the vertex labels
    for(int i=0; i < n; i++) {
      if (! in.getline(line, 999)) {
	cerr << "Unable to finish reading file..." << endl;
	exit(0);
      }
      // store the vertex label
      Vertex v(line, i);
      V.push_back(v);
    }

    // read in the edges
    while (in.getline(line, 999)) {
      int s, d, w;
      stringstream line_s(line, ios_base::in);
      line_s >> s >> d >> w;
      Edge e(s, d, w);
      E.push_back(e);
    }
    in.close();

    compute_degrees();
  }

  
  void print() {
    cout << "n = " << n << endl;

    for(int i=0; i < V.size(); i++)
      V[i].print();

    for(int i=0; i < E.size(); i++)
      E[i].print();
  }

  void compute_degrees() {
    for(int i=0; i < V.size(); i++) {
      V[i].degree = 0;
    }

    for(int i=0; i < E.size(); i++) {
      int j = E[i].src;
      V[j].degree ++ ;
      
      j = E[i].dst;
      V[j].degree ++ ;
    }
  }

  // BFS - perform BFS from s
  void BFS(int s) {
  }
  
  // DFS
};

int main(int argc, char * argv[]) {
  if (argc < 2) {
    cerr << "Usage: ./graph1 graph_text_file.txt" << endl;
    exit(0);
  }

  Graph G(argv[1]);
  
  G.print();
  
  return 0;
}