docs: def strong_connect(self, q, node, index, component):
          '''
          API: strong_connect (self, q, node, index, component)
          Description:
          Used by tarjan method. This method should not be called directly by
          user.
          Input:
              q: Node list.
              node: Node that is being connected to nodes in q.
              index: Index used by tarjan method.
              component: Current component number.
          Pre:
              Should be called by tarjan and itself (recursive) only.
          Post:
              Nodes will have 'component' attribute that will have component
              number as value. Changes 'index' attribute of nodes.
          Return:
              Returns new index and component numbers.
          '''
          self.set_node_attr(node, 'index', index)
          self.set_node_attr(node, 'lowlink', index)
          index += 1
          q.append(node)
          for m in self.get_neighbors(node):
              if self.get_node_attr(m, 'index') is None:
                  index, component = self.strong_connect(q, m, index, component)
                  self.set_node_attr(node, 'lowlink',
                                     min([self.get_node_attr(node, 'lowlink'),
                                          self.get_node_attr(m, 'lowlink')]))
              elif m in q:
                  self.set_node_attr(node, 'lowlink',
                                     min([self.get_node_attr(node, 'lowlink'),
                                          self.get_node_attr(m, 'index')]))
          if self.get_node_attr(node, 'lowlink') == self.get_node_attr(node, 'index'):
              m = q.pop()
              self.set_node_attr(m, 'component', component)
              while (node!=m):
                  m = q.pop()
                  self.set_node_attr(m, 'component', component)
              component += 1
              self.num_components = component
  
          return (index, component)