Below is the syntax highlighted version ofArbitrage.javafrom4.4 Shortest Paths.

/******************************************************************************* Compilation: javac Arbitrage.java* Execution: java Arbitrage input.txt* Dependencies: EdgeWeightedDigraph.java DirectedEdge.java* BellmanFordSP.java* Data file:** Arbitrage detection.** % more rates.txt* 5* USD 1 0.741 0.657 1.061 1.005* EUR 1.349 1 0.888 1.433 1.366* GBP 1.521 1.126 1 1.614 1.538* CHF 0.942 0.698 0.619 1 0.953* CAD 0.995 0.732 0.650 1.049 1** % java Arbitrage rates.txt* 1000.00000 USD = 741.00000 EUR* 741.00000 EUR = 1012.20600 CAD* 1012.20600 CAD = 1007.14497 USD*******************************************************************************//*** The @codeArbitrage class provides a client that finds an arbitrage* opportunity in a currency exchange table by constructing a* complete-digraph representation of the exchange table and then finding* a negative cycle in the digraph.*p* This implementation uses the Bellman-Ford algorithm to find a* negative cycle in the complete digraph.* The running time is proportional toemV/emsup3/supin the* worst case, whereemV/emis the number of currencies.*p* For additional documentation,* seeahref=Section 4.4/aof*iAlgorithms, 4th Edition/iby Robert Sedgewick and Kevin Wayne.**@authorRobert Sedgewick*@authorKevin Wayne*/publicclassArbitrage// this class cannot be instantiatedprivateArbitrage()/*** Reads the currency exchange table from standard input and* prints an arbitrage opportunity to standard output (if one exists).**@paramargs the command-line arguments*/publicstaticvoidmain(String[]args)// V currenciesintV=StdIn.readInt();String[]name=newString[V];// create complete networkEdgeWeightedDigraphG=newEdgeWeightedDigraph(V);for(intv=0;vV;v++)name[v]=StdIn.readString();for(intw=0;wV;w++)doublerate=StdIn.readDouble();DirectedEdgee=newDirectedEdge(v,w,-Math.log(rate));G.addEdge(e)// find negative cycleBellmanFordSPspt=newBellmanFordSP(G,0);if(spt.hasNegativeCycle())doublestake=1000.0;for(DirectedEdgee:spt.negativeCycle())StdOut.printf(%10.5f %s,stake,name[e.from()]);stake*=Math.exp(-e.weight());StdOut.printf(= %10.5f %s\n,stake,name[e.to()])elseStdOut.println(No arbitrage opportunity)