code: def _depth_first_search(self, target_id, layer_id_list, node_list):
          
          assert len(node_list) <= self.n_nodes
          u = node_list[-1]
          if u == target_id:
              return True
  
          for v, layer_id in self.adj_list[u]:
              layer_id_list.append(layer_id)
              node_list.append(v)
              if self._depth_first_search(target_id, layer_id_list, node_list):
                  return True
              layer_id_list.pop()
              node_list.pop()
  
          return False
docs: Search for all the layers and nodes down the path.
          A recursive function to search all the layers and nodes between the node in the node_list
              and the node with target_id.