code: private static <Vertex,Label> List<Vertex> convert(final List<Pair<Vertex,Label>> list) {
  	return 
  	    DSUtil.<Pair<Vertex,Label>,Vertex>mapList
  	    (list, 
  	     new Function<Pair<Vertex,Label>,Vertex>() {
  		public Vertex f(Pair<Vertex,Label> p) {
  		    return p.left;
  		}
  	    });
      }
docs: /* unfinished implementation: compute smallest weight path between two vertices.
  public List<Pair<Vertex,Label>> findMinPath(Vertex src, Vertex dst, final WeightOp<Label> wop) {
  final Map<Vertex,Label> v2cost = new LinkedHashMap<Vertex,Label>();
  WorkSet<Vertex> ws = new WorkPriorityQueue<Vertex>(new Comparator<Vertex>() {
  public int compare(Vertex v1, Vertex v2) {
  Label l1 = v2cost.get(v1);
  Label l2 = v2cost.get(v2);
  if(l1 == null) {
  return l2 == null ? 0 : -1;
  }
  if(l2 == null) {
  return l1 == null ? 0 : +1;
  }
  if(wop.lt(l1, l2)) return -1;
  if(wop.lt(l2, l1)) return +1;
  return 0;
  }
  });
  
  TODO: CONTINUE
  }
  
  public static interface WeightOp<Label> {
  Label add(Label l1, Label l2);
  boolean lt(Label l1, Label l2);
  }