public static <V, W, E extends DirectedWeightedEdge<V, W>> void relaxEnough(
     Graph<V, E> graph,
     SingleSourceShortestPathCalcStatus<V, W, E> status,
     InfinitableAddableNumberSystem<W> ns) {
   for (int i = 0; i < graph.getVertices().size() - 1; i++)
     for (E e : AllEdgeInGraph.wrap(graph)) Relax.relax(status.distance, status.previous, e, ns);
 }
 private static <V, W, E extends DirectedWeightedEdge<V, W>> void relaxToCheckNegativeCycle(
     Graph<V, E> graph,
     InfinitableAddableNumberSystem<W> ns,
     SingleSourceShortestPathCalcStatus<V, W, E> status) {
   for (E e : AllEdgeInGraph.wrap(graph)) {
     boolean relaxed = Relax.relax(status.distance, status.previous, e, ns);
     AssertStatus.assertTrue(!relaxed, "contains negative cycle");
   }
 }