#include <vector>
#include <stack>

using namespace std;

class GrafoDirigido {

   struct Arco {
      int vecino;
      float peso;
      Arco * siguiente;
      Arco(int, float, Arco *);
   };

   struct Vertice {
      Arco * primerArcoDeEntrada;
      Arco * primerArcoDeSalida;
      int gradoDeEntrada;
      int gradoDeSalida;
      Vertice();
   };

   vector<Vertice> vertices;
   
   void KosarajuSharirEtapa1DFS(int, vector<bool> &, stack<int> &) const;

   void KosarajuSharirEtapa2DFS(int, vector<int> &, int) const;

 public:

   GrafoDirigido(const char *);

   void mostrar() const;

   int cantidadDeVertices() const;

   vector<int> colorearConectados() const;

};