// Copyright (c) 2001 Dustin Sallings <dustin@spy.net> package net.spy.util; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import junit.framework.TestCase; /** * Test a weak hash set. */ public class ShortestPathTest extends TestCase { Map<String, StringNode> nodes=null; private StringNode nodeA=null; private StringNode nodeB=null; private StringNode nodeC=null; private StringNode nodeD=null; private StringNode nodeE=null; private StringNode nodeF=null; private StringNode nodeG=null; /** * Create the collection of nodes. */ @Override protected void setUp() { nodes=new java.util.TreeMap<String, StringNode>(); nodeA=new StringNode("A"); nodeB=new StringNode("B"); nodeC=new StringNode("C"); nodeD=new StringNode("D"); nodeE=new StringNode("E"); nodeF=new StringNode("F"); nodeG=new StringNode("G"); // Add the nodes to the collection nodes.put("A", nodeA); nodes.put("B", nodeB); nodes.put("C", nodeC); nodes.put("D", nodeD); nodes.put("E", nodeE); nodes.put("F", nodeF); nodes.put("G", nodeG); // A -> B A -> C (cost 15) nodeA.linkTo(nodeB); nodeA.linkTo(nodeC, 15); // B -> C nodeB.linkTo(nodeC); // C -> D C -> E C -> F nodeC.linkTo(nodeD); nodeC.linkTo(nodeE); nodeC.linkTo(nodeF); nodeC.linkTo(nodeG, 100); // D -> E // d.linkTo(e); // D -> C at a higher cost, giving it a path to E nodeD.linkTo(nodeC, 100); // Link e to itself nodeE.linkTo(nodeE, 10); // And f links to g and b nodeF.linkTo(nodeG, 10); nodeF.linkTo(nodeB, 200); // calculate the paths ShortestPathFinder spf=new ShortestPathFinder(); spf.calculatePaths(nodes.values()); } // verify a link matches the way we want private void assertLinkMatch(StringNode a, StringNode b, SPNode<?> expectedNextHop, int cost) { SPVertex<?> nextHop=a.getNextHop(b); if(expectedNextHop == null) { assertNull("Expected no link from " + a + " to " + b, nextHop); } else { assertNotNull("Expected a link from " + a + " to " + b, nextHop); assertSame("Expected link from " + a + " to " + b + " to be via " + expectedNextHop + ", got " + nextHop.getTo(), nextHop.getTo(), expectedNextHop); assertEquals("Incorrect cost for " + a + " -> " + b, cost, nextHop.getCost()); } } public void testEquality() throws Exception { StringNode sn1=new StringNode("Test"); StringNode sn2=new StringNode("Test"); assertEquals(sn1, sn2); assertEquals(sn2, sn1); assertFalse(sn1.equals("Test")); assertFalse("Test".equals(sn1)); } public void testSPVertexStuff() { StringNode sn1=new StringNode("String1"); StringNode sn2=new StringNode("String2"); SPVertex<StringNode> v1=new SPVertex<StringNode>(sn1); SPVertex<StringNode> v2=new SPVertex<StringNode>(sn1, 100); SPVertex<StringNode> v3=new SPVertex<StringNode>(sn2); SPVertex<StringNode> v4=new SPVertex<StringNode>(sn2); assertEquals(SPVertex.DEFAULT_COST, v1.getCost()); String.valueOf(v1); assertEquals(0, v1.compareTo(v1)); assertEquals(-1, v1.compareTo(v2)); assertEquals(1, v2.compareTo(v1)); assertEquals(-1, v1.compareTo(v3)); assertEquals(0, v3.compareTo(v4)); assertNotSame(v3, v4); try { SPVertex<StringNode> v=new SPVertex<StringNode>((StringNode)null); fail("Allowed me to make a null SPVertex: " + v); } catch(NullPointerException e) { assertNotNull(e.getMessage()); } } /** * Test a basic SP find. */ public void testSPFind() { // Print out links...this is kinda big and ugly /* for(StringNode : nodes) { sn.dump(); } */ // These are manual tests. Based on the way I configured the graph // above, these are all of the expected values (least costly // next-hops). // A -> A -- no match assertLinkMatch(nodeA, nodeA, null, 0); // A -> B == 10 via B assertLinkMatch(nodeA, nodeB, nodeB, 10); // A -> C == 15 via C assertLinkMatch(nodeA, nodeC, nodeC, 15); // A -> D == 25 via C assertLinkMatch(nodeA, nodeD, nodeC, 25); // A -> E == 25 via C assertLinkMatch(nodeA, nodeE, nodeC, 25); // A -> F == 25 via C assertLinkMatch(nodeA, nodeF, nodeC, 25); // A -> G == 35 via C assertLinkMatch(nodeA, nodeG, nodeC, 35); assertEquals(6, nodeA.getNextHops().size()); // B -> A -- doesn't exist assertLinkMatch(nodeB, nodeA, null, 0); // B -> B -- via C assertLinkMatch(nodeB, nodeB, nodeC, 220); // B -> C == 10 via C assertLinkMatch(nodeB, nodeC, nodeC, 10); // B -> D == 20 via C assertLinkMatch(nodeB, nodeD, nodeC, 20); // B -> E == 20 via C assertLinkMatch(nodeB, nodeE, nodeC, 20); // B -> F == 20 via C assertLinkMatch(nodeB, nodeF, nodeC, 20); // B -> G == 30 via C assertLinkMatch(nodeB, nodeG, nodeC, 30); assertEquals(6, nodeB.getNextHops().size()); // C -> A won't go assertLinkMatch(nodeC, nodeA, null, 0); // C -> B via F assertLinkMatch(nodeC, nodeB, nodeF, 210); // C -> C via D? assertLinkMatch(nodeC, nodeC, nodeD, 110); // C -> D == 10 via D assertLinkMatch(nodeC, nodeD, nodeD, 10); // C -> E == 10 via E assertLinkMatch(nodeC, nodeE, nodeE, 10); // C -> F == 10 via F assertLinkMatch(nodeC, nodeF, nodeF, 10); // C -> G == 20 via F assertLinkMatch(nodeC, nodeG, nodeF, 20); assertEquals(6, nodeC.getNextHops().size()); // D -> A won't go assertLinkMatch(nodeD, nodeA, null, 0); // D -> B via C assertLinkMatch(nodeD, nodeB, nodeC, 310); // D -> C via C assertLinkMatch(nodeD, nodeC, nodeC, 100); // D -> D via C assertLinkMatch(nodeD, nodeD, nodeC, 110); // D -> E via C assertLinkMatch(nodeD, nodeE, nodeC, 110); // D -> F via C assertLinkMatch(nodeD, nodeF, nodeC, 110); // D -> G via C assertLinkMatch(nodeD, nodeG, nodeC, 120); assertEquals(6, nodeD.getNextHops().size()); // E Goes nowhere except E assertLinkMatch(nodeE, nodeA, null, 0); assertLinkMatch(nodeE, nodeB, null, 0); assertLinkMatch(nodeE, nodeC, null, 0); assertLinkMatch(nodeE, nodeD, null, 0); assertLinkMatch(nodeE, nodeE, nodeE, 10); assertLinkMatch(nodeE, nodeF, null, 0); assertLinkMatch(nodeE, nodeG, null, 0); assertEquals(1, nodeE.getNextHops().size()); // F Goes to G and B assertLinkMatch(nodeF, nodeA, null, 0); assertLinkMatch(nodeF, nodeB, nodeB, 200); assertLinkMatch(nodeF, nodeC, nodeB, 210); assertLinkMatch(nodeF, nodeD, nodeB, 220); assertLinkMatch(nodeF, nodeE, nodeB, 220); assertLinkMatch(nodeF, nodeF, nodeB, 220); assertLinkMatch(nodeF, nodeG, nodeG, 10); assertEquals(6, nodeF.getNextHops().size()); // G Goes to nowhere assertLinkMatch(nodeG, nodeA, null, 0); assertLinkMatch(nodeG, nodeB, null, 0); assertLinkMatch(nodeG, nodeC, null, 0); assertLinkMatch(nodeG, nodeD, null, 0); assertLinkMatch(nodeG, nodeE, null, 0); assertLinkMatch(nodeG, nodeF, null, 0); assertLinkMatch(nodeG, nodeG, null, 0); assertEquals(0, nodeG.getNextHops().size()); } /** * Do a couple of quick ShortestPath tests. */ public void testShortestPath() throws NoPathException { ShortestPath<StringNode> sp=new ShortestPath<StringNode>(nodeA, nodeB); assertEquals("ShortestPath from A -> B", 1, sp.size()); try { sp=new ShortestPath<StringNode>(nodeA, nodeA); fail("Expected to not find a path from A -> A, found " + sp); } catch(NoPathException e) { // Success } try { sp=new ShortestPath<StringNode>(null, nodeA); fail("Expected to not find a path from null -> A, found " + sp); } catch(NullPointerException e) { assertNotNull(e.getMessage()); } try { sp=new ShortestPath<StringNode>(nodeA, null); fail("Expected to not find a path from A -> null, found " + sp); } catch(NullPointerException e) { assertNotNull(e.getMessage()); } sp=new ShortestPath<StringNode>(nodeA, nodeC); assertEquals("ShortestPath from A -> C: " + sp, 1, sp.size()); assertEquals(15, sp.getCost()); sp=new ShortestPath<StringNode>(nodeA, nodeD); assertEquals("ShortestPath from A -> D: " + sp, 2, sp.size()); assertEquals(25, sp.getCost()); sp=new ShortestPath<StringNode>(nodeA, nodeE); assertEquals("ShortestPath from A -> E: " + sp, 2, sp.size()); assertEquals(25, sp.getCost()); sp=new ShortestPath<StringNode>(nodeD, nodeE); assertEquals("ShortestPath from D -> E: " + sp, 2, sp.size()); assertEquals(110, sp.getCost()); sp=new ShortestPath<StringNode>(nodeE, nodeE); assertEquals("ShortestPath from E -> E: " + sp, 1, sp.size()); assertEquals(10, sp.getCost()); } public void testLongShortestPath() throws Exception { ArrayList<StringNode> al=new ArrayList<StringNode>(1051); StringNode sn=new StringNode("starting node"); al.add(sn); StringNode lastNode=sn; for(int i=0; i<1050; i++) { StringNode newNode=new StringNode(String.valueOf(i)); al.add(newNode); lastNode.linkTo(newNode); lastNode=newNode; } ShortestPathFinder spf=new ShortestPathFinder(); spf.calculatePaths(al); try { ShortestPath<StringNode> sp=new ShortestPath<StringNode>(sn, lastNode); fail("Expected path to be too deep from " + sn + " to " + lastNode + ", but found" + sp); } catch(NoPathException e) { assertEquals("No path from " + sn + " to " + lastNode + " - Too deep!", e.getMessage()); } } /** * Verify garbage collection can clean up the instances. */ public void testCleanup() { WeakReference<StringNode> aref=new WeakReference<StringNode>(nodeA); WeakReference<StringNode> bref=new WeakReference<StringNode>(nodeB); WeakReference<StringNode> cref=new WeakReference<StringNode>(nodeC); WeakReference<StringNode> dref=new WeakReference<StringNode>(nodeD); WeakReference<StringNode> eref=new WeakReference<StringNode>(nodeE); // Verify the reference is alive assertNotNull("Reference to A is broken", aref.get()); assertNotNull("Reference to B is broken", bref.get()); assertNotNull("Reference to C is broken", cref.get()); assertNotNull("Reference to D is broken", dref.get()); assertNotNull("Reference to E is broken", eref.get()); // Kill them all. nodes=null; nodeA=null; nodeB=null; nodeC=null; nodeD=null; nodeE=null; // Pick up the trash System.gc(); // Verify the reference is dead assertNull("Node A is still around", aref.get()); assertNull("Node B is still around", bref.get()); assertNull("Node C is still around", cref.get()); assertNull("Node D is still around", dref.get()); assertNull("Node E is still around", eref.get()); } /** * Validate a large graph with a lot of links may be created. */ public void testBigGraph() { List<StringNode> tmpList=new ArrayList<StringNode>(100); tmpList.add(new StringNode("0")); tmpList.add(new StringNode("1")); tmpList.add(new StringNode("2")); tmpList.add(new StringNode("3")); tmpList.add(new StringNode("4")); tmpList.add(new StringNode("5")); tmpList.add(new StringNode("6")); tmpList.add(new StringNode("7")); tmpList.add(new StringNode("8")); tmpList.add(new StringNode("9")); tmpList.add(new StringNode("10")); tmpList.add(new StringNode("11")); tmpList.add(new StringNode("12")); tmpList.add(new StringNode("13")); tmpList.add(new StringNode("14")); tmpList.add(new StringNode("15")); tmpList.add(new StringNode("16")); tmpList.add(new StringNode("17")); tmpList.add(new StringNode("18")); tmpList.add(new StringNode("19")); tmpList.add(new StringNode("20")); tmpList.add(new StringNode("21")); tmpList.add(new StringNode("22")); tmpList.add(new StringNode("23")); tmpList.add(new StringNode("24")); tmpList.add(new StringNode("25")); tmpList.add(new StringNode("26")); tmpList.add(new StringNode("27")); tmpList.add(new StringNode("28")); tmpList.add(new StringNode("29")); tmpList.add(new StringNode("30")); tmpList.add(new StringNode("31")); tmpList.add(new StringNode("32")); tmpList.add(new StringNode("33")); tmpList.add(new StringNode("34")); tmpList.add(new StringNode("35")); tmpList.add(new StringNode("36")); tmpList.add(new StringNode("37")); tmpList.add(new StringNode("38")); tmpList.add(new StringNode("39")); tmpList.add(new StringNode("40")); tmpList.add(new StringNode("41")); tmpList.add(new StringNode("42")); tmpList.add(new StringNode("43")); tmpList.add(new StringNode("44")); tmpList.add(new StringNode("45")); tmpList.add(new StringNode("46")); tmpList.add(new StringNode("47")); tmpList.add(new StringNode("48")); tmpList.add(new StringNode("49")); tmpList.add(new StringNode("50")); tmpList.add(new StringNode("51")); tmpList.add(new StringNode("52")); tmpList.add(new StringNode("53")); tmpList.add(new StringNode("54")); tmpList.add(new StringNode("55")); tmpList.add(new StringNode("56")); tmpList.add(new StringNode("57")); tmpList.add(new StringNode("58")); tmpList.add(new StringNode("59")); tmpList.add(new StringNode("60")); tmpList.add(new StringNode("61")); tmpList.add(new StringNode("62")); tmpList.add(new StringNode("63")); tmpList.add(new StringNode("64")); tmpList.add(new StringNode("65")); tmpList.add(new StringNode("66")); tmpList.add(new StringNode("67")); tmpList.add(new StringNode("68")); tmpList.add(new StringNode("69")); tmpList.add(new StringNode("70")); tmpList.add(new StringNode("71")); tmpList.add(new StringNode("72")); tmpList.add(new StringNode("73")); tmpList.add(new StringNode("74")); tmpList.add(new StringNode("75")); tmpList.add(new StringNode("76")); tmpList.add(new StringNode("77")); tmpList.add(new StringNode("78")); tmpList.add(new StringNode("79")); tmpList.add(new StringNode("80")); tmpList.add(new StringNode("81")); tmpList.add(new StringNode("82")); tmpList.add(new StringNode("83")); tmpList.add(new StringNode("84")); tmpList.add(new StringNode("85")); tmpList.add(new StringNode("86")); tmpList.add(new StringNode("87")); tmpList.add(new StringNode("88")); tmpList.add(new StringNode("89")); tmpList.add(new StringNode("90")); tmpList.add(new StringNode("91")); tmpList.add(new StringNode("92")); tmpList.add(new StringNode("93")); tmpList.add(new StringNode("94")); tmpList.add(new StringNode("95")); tmpList.add(new StringNode("96")); tmpList.add(new StringNode("97")); tmpList.add(new StringNode("98")); tmpList.add(new StringNode("99")); StringNode tmpNode=null; tmpNode=tmpList.get(62); tmpNode.linkTo(tmpList.get(10)); tmpNode.linkTo(tmpList.get(81)); tmpNode.linkTo(tmpList.get(22)); tmpNode.linkTo(tmpList.get(34)); tmpNode.linkTo(tmpList.get(44)); tmpNode.linkTo(tmpList.get(61)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(87)); tmpNode.linkTo(tmpList.get(61)); tmpNode.linkTo(tmpList.get(27)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(46)); tmpNode.linkTo(tmpList.get(79)); tmpNode.linkTo(tmpList.get(39)); tmpNode.linkTo(tmpList.get(65)); tmpNode.linkTo(tmpList.get(95)); tmpNode.linkTo(tmpList.get(1)); tmpNode.linkTo(tmpList.get(33)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(74)); tmpNode.linkTo(tmpList.get(72)); tmpNode.linkTo(tmpList.get(80)); tmpNode.linkTo(tmpList.get(36)); tmpNode.linkTo(tmpList.get(72)); tmpNode.linkTo(tmpList.get(1)); tmpNode=tmpList.get(40); tmpNode.linkTo(tmpList.get(27)); tmpNode.linkTo(tmpList.get(33)); tmpNode.linkTo(tmpList.get(21)); tmpNode.linkTo(tmpList.get(33)); tmpNode.linkTo(tmpList.get(24)); tmpNode.linkTo(tmpList.get(83)); tmpNode.linkTo(tmpList.get(18)); tmpNode.linkTo(tmpList.get(50)); tmpNode.linkTo(tmpList.get(51)); tmpNode.linkTo(tmpList.get(11)); tmpNode.linkTo(tmpList.get(93)); tmpNode.linkTo(tmpList.get(31)); tmpNode.linkTo(tmpList.get(56)); tmpNode.linkTo(tmpList.get(64)); tmpNode.linkTo(tmpList.get(53)); tmpNode.linkTo(tmpList.get(79)); tmpNode.linkTo(tmpList.get(67)); tmpNode.linkTo(tmpList.get(66)); tmpNode.linkTo(tmpList.get(63)); tmpNode.linkTo(tmpList.get(50)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(63)); tmpNode.linkTo(tmpList.get(65)); tmpNode.linkTo(tmpList.get(13)); tmpNode.linkTo(tmpList.get(69)); tmpNode=tmpList.get(70); tmpNode.linkTo(tmpList.get(78)); tmpNode.linkTo(tmpList.get(94)); tmpNode.linkTo(tmpList.get(83)); tmpNode.linkTo(tmpList.get(10)); tmpNode.linkTo(tmpList.get(99)); tmpNode.linkTo(tmpList.get(51)); tmpNode.linkTo(tmpList.get(63)); tmpNode.linkTo(tmpList.get(82)); tmpNode.linkTo(tmpList.get(62)); tmpNode.linkTo(tmpList.get(58)); tmpNode.linkTo(tmpList.get(21)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(2)); tmpNode.linkTo(tmpList.get(74)); tmpNode.linkTo(tmpList.get(34)); tmpNode.linkTo(tmpList.get(25)); tmpNode.linkTo(tmpList.get(5)); tmpNode.linkTo(tmpList.get(51)); tmpNode.linkTo(tmpList.get(64)); tmpNode.linkTo(tmpList.get(10)); tmpNode.linkTo(tmpList.get(88)); tmpNode.linkTo(tmpList.get(29)); tmpNode.linkTo(tmpList.get(50)); tmpNode.linkTo(tmpList.get(75)); tmpNode.linkTo(tmpList.get(26)); tmpNode=tmpList.get(24); tmpNode.linkTo(tmpList.get(18)); tmpNode.linkTo(tmpList.get(22)); tmpNode.linkTo(tmpList.get(47)); tmpNode.linkTo(tmpList.get(8)); tmpNode.linkTo(tmpList.get(89)); tmpNode.linkTo(tmpList.get(42)); tmpNode.linkTo(tmpList.get(17)); tmpNode.linkTo(tmpList.get(47)); tmpNode.linkTo(tmpList.get(87)); tmpNode.linkTo(tmpList.get(69)); tmpNode.linkTo(tmpList.get(78)); tmpNode.linkTo(tmpList.get(7)); tmpNode.linkTo(tmpList.get(95)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(47)); tmpNode.linkTo(tmpList.get(22)); tmpNode.linkTo(tmpList.get(87)); tmpNode.linkTo(tmpList.get(66)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(92)); tmpNode.linkTo(tmpList.get(91)); tmpNode.linkTo(tmpList.get(40)); tmpNode.linkTo(tmpList.get(63)); tmpNode.linkTo(tmpList.get(52)); tmpNode.linkTo(tmpList.get(85)); tmpNode=tmpList.get(9); tmpNode.linkTo(tmpList.get(62)); tmpNode.linkTo(tmpList.get(23)); tmpNode.linkTo(tmpList.get(66)); tmpNode.linkTo(tmpList.get(52)); tmpNode.linkTo(tmpList.get(76)); tmpNode.linkTo(tmpList.get(81)); tmpNode.linkTo(tmpList.get(53)); tmpNode.linkTo(tmpList.get(98)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(32)); tmpNode.linkTo(tmpList.get(73)); tmpNode.linkTo(tmpList.get(26)); tmpNode.linkTo(tmpList.get(33)); tmpNode.linkTo(tmpList.get(20)); tmpNode.linkTo(tmpList.get(19)); tmpNode.linkTo(tmpList.get(4)); tmpNode.linkTo(tmpList.get(94)); tmpNode.linkTo(tmpList.get(78)); tmpNode.linkTo(tmpList.get(99)); tmpNode.linkTo(tmpList.get(33)); tmpNode.linkTo(tmpList.get(24)); tmpNode.linkTo(tmpList.get(45)); tmpNode.linkTo(tmpList.get(79)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(22)); tmpNode=tmpList.get(27); tmpNode.linkTo(tmpList.get(41)); tmpNode.linkTo(tmpList.get(68)); tmpNode.linkTo(tmpList.get(92)); tmpNode.linkTo(tmpList.get(88)); tmpNode.linkTo(tmpList.get(66)); tmpNode.linkTo(tmpList.get(22)); tmpNode.linkTo(tmpList.get(8)); tmpNode.linkTo(tmpList.get(27)); tmpNode.linkTo(tmpList.get(0)); tmpNode.linkTo(tmpList.get(4)); tmpNode.linkTo(tmpList.get(81)); tmpNode.linkTo(tmpList.get(46)); tmpNode.linkTo(tmpList.get(34)); tmpNode.linkTo(tmpList.get(7)); tmpNode.linkTo(tmpList.get(55)); tmpNode.linkTo(tmpList.get(86)); tmpNode.linkTo(tmpList.get(19)); tmpNode.linkTo(tmpList.get(49)); tmpNode.linkTo(tmpList.get(57)); tmpNode.linkTo(tmpList.get(47)); tmpNode.linkTo(tmpList.get(15)); tmpNode.linkTo(tmpList.get(65)); tmpNode.linkTo(tmpList.get(37)); tmpNode.linkTo(tmpList.get(43)); tmpNode.linkTo(tmpList.get(2)); tmpNode=tmpList.get(75); tmpNode.linkTo(tmpList.get(82)); tmpNode.linkTo(tmpList.get(72)); tmpNode.linkTo(tmpList.get(10)); tmpNode.linkTo(tmpList.get(76)); tmpNode.linkTo(tmpList.get(85)); tmpNode.linkTo(tmpList.get(6)); tmpNode.linkTo(tmpList.get(88)); tmpNode.linkTo(tmpList.get(13)); tmpNode.linkTo(tmpList.get(87)); tmpNode.linkTo(tmpList.get(47)); tmpNode.linkTo(tmpList.get(61)); tmpNode.linkTo(tmpList.get(32)); tmpNode.linkTo(tmpList.get(80)); tmpNode.linkTo(tmpList.get(33)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(79)); tmpNode.linkTo(tmpList.get(35)); tmpNode.linkTo(tmpList.get(93)); tmpNode.linkTo(tmpList.get(94)); tmpNode.linkTo(tmpList.get(47)); tmpNode.linkTo(tmpList.get(10)); tmpNode.linkTo(tmpList.get(96)); tmpNode.linkTo(tmpList.get(93)); tmpNode.linkTo(tmpList.get(14)); tmpNode.linkTo(tmpList.get(88)); tmpNode=tmpList.get(49); tmpNode.linkTo(tmpList.get(25)); tmpNode.linkTo(tmpList.get(40)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(72)); tmpNode.linkTo(tmpList.get(49)); tmpNode.linkTo(tmpList.get(23)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(24)); tmpNode.linkTo(tmpList.get(98)); tmpNode.linkTo(tmpList.get(71)); tmpNode.linkTo(tmpList.get(94)); tmpNode.linkTo(tmpList.get(84)); tmpNode.linkTo(tmpList.get(89)); tmpNode.linkTo(tmpList.get(65)); tmpNode.linkTo(tmpList.get(76)); tmpNode.linkTo(tmpList.get(87)); tmpNode.linkTo(tmpList.get(23)); tmpNode.linkTo(tmpList.get(53)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(17)); tmpNode.linkTo(tmpList.get(4)); tmpNode.linkTo(tmpList.get(16)); tmpNode.linkTo(tmpList.get(7)); tmpNode.linkTo(tmpList.get(6)); tmpNode.linkTo(tmpList.get(48)); tmpNode=tmpList.get(54); tmpNode.linkTo(tmpList.get(38)); tmpNode.linkTo(tmpList.get(95)); tmpNode.linkTo(tmpList.get(98)); tmpNode.linkTo(tmpList.get(51)); tmpNode.linkTo(tmpList.get(71)); tmpNode.linkTo(tmpList.get(88)); tmpNode.linkTo(tmpList.get(2)); tmpNode.linkTo(tmpList.get(69)); tmpNode.linkTo(tmpList.get(58)); tmpNode.linkTo(tmpList.get(49)); tmpNode.linkTo(tmpList.get(72)); tmpNode.linkTo(tmpList.get(79)); tmpNode.linkTo(tmpList.get(24)); tmpNode.linkTo(tmpList.get(96)); tmpNode.linkTo(tmpList.get(66)); tmpNode.linkTo(tmpList.get(16)); tmpNode.linkTo(tmpList.get(1)); tmpNode.linkTo(tmpList.get(80)); tmpNode.linkTo(tmpList.get(22)); tmpNode.linkTo(tmpList.get(15)); tmpNode.linkTo(tmpList.get(64)); tmpNode.linkTo(tmpList.get(96)); tmpNode.linkTo(tmpList.get(9)); tmpNode.linkTo(tmpList.get(30)); tmpNode.linkTo(tmpList.get(2)); tmpNode=tmpList.get(72); tmpNode.linkTo(tmpList.get(99)); tmpNode.linkTo(tmpList.get(48)); tmpNode.linkTo(tmpList.get(44)); tmpNode.linkTo(tmpList.get(82)); tmpNode.linkTo(tmpList.get(72)); tmpNode.linkTo(tmpList.get(39)); tmpNode.linkTo(tmpList.get(44)); tmpNode.linkTo(tmpList.get(52)); tmpNode.linkTo(tmpList.get(67)); tmpNode.linkTo(tmpList.get(0)); tmpNode.linkTo(tmpList.get(23)); tmpNode.linkTo(tmpList.get(45)); tmpNode.linkTo(tmpList.get(82)); tmpNode.linkTo(tmpList.get(71)); tmpNode.linkTo(tmpList.get(54)); tmpNode.linkTo(tmpList.get(51)); tmpNode.linkTo(tmpList.get(11)); tmpNode.linkTo(tmpList.get(99)); tmpNode.linkTo(tmpList.get(82)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(62)); tmpNode.linkTo(tmpList.get(37)); tmpNode.linkTo(tmpList.get(27)); tmpNode.linkTo(tmpList.get(93)); tmpNode.linkTo(tmpList.get(64)); tmpNode=tmpList.get(23); tmpNode.linkTo(tmpList.get(74)); tmpNode.linkTo(tmpList.get(33)); tmpNode.linkTo(tmpList.get(45)); tmpNode.linkTo(tmpList.get(51)); tmpNode.linkTo(tmpList.get(16)); tmpNode.linkTo(tmpList.get(89)); tmpNode.linkTo(tmpList.get(84)); tmpNode.linkTo(tmpList.get(89)); tmpNode.linkTo(tmpList.get(76)); tmpNode.linkTo(tmpList.get(8)); tmpNode.linkTo(tmpList.get(84)); tmpNode.linkTo(tmpList.get(49)); tmpNode.linkTo(tmpList.get(46)); tmpNode.linkTo(tmpList.get(11)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(71)); tmpNode.linkTo(tmpList.get(48)); tmpNode.linkTo(tmpList.get(16)); tmpNode.linkTo(tmpList.get(69)); tmpNode.linkTo(tmpList.get(66)); tmpNode.linkTo(tmpList.get(0)); tmpNode.linkTo(tmpList.get(4)); tmpNode.linkTo(tmpList.get(18)); tmpNode.linkTo(tmpList.get(79)); tmpNode.linkTo(tmpList.get(30)); tmpNode=tmpList.get(9); tmpNode.linkTo(tmpList.get(40)); tmpNode.linkTo(tmpList.get(44)); tmpNode.linkTo(tmpList.get(84)); tmpNode.linkTo(tmpList.get(69)); tmpNode.linkTo(tmpList.get(52)); tmpNode.linkTo(tmpList.get(70)); tmpNode.linkTo(tmpList.get(25)); tmpNode.linkTo(tmpList.get(36)); tmpNode.linkTo(tmpList.get(68)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(17)); tmpNode.linkTo(tmpList.get(93)); tmpNode.linkTo(tmpList.get(44)); tmpNode.linkTo(tmpList.get(58)); tmpNode.linkTo(tmpList.get(20)); tmpNode.linkTo(tmpList.get(20)); tmpNode.linkTo(tmpList.get(54)); tmpNode.linkTo(tmpList.get(15)); tmpNode.linkTo(tmpList.get(75)); tmpNode.linkTo(tmpList.get(8)); tmpNode.linkTo(tmpList.get(89)); tmpNode.linkTo(tmpList.get(5)); tmpNode.linkTo(tmpList.get(68)); tmpNode.linkTo(tmpList.get(78)); tmpNode.linkTo(tmpList.get(39)); tmpNode=tmpList.get(39); tmpNode.linkTo(tmpList.get(37)); tmpNode.linkTo(tmpList.get(68)); tmpNode.linkTo(tmpList.get(14)); tmpNode.linkTo(tmpList.get(25)); tmpNode.linkTo(tmpList.get(81)); tmpNode.linkTo(tmpList.get(67)); tmpNode.linkTo(tmpList.get(63)); tmpNode.linkTo(tmpList.get(16)); tmpNode.linkTo(tmpList.get(30)); tmpNode.linkTo(tmpList.get(31)); tmpNode.linkTo(tmpList.get(84)); tmpNode.linkTo(tmpList.get(42)); tmpNode.linkTo(tmpList.get(9)); tmpNode.linkTo(tmpList.get(29)); tmpNode.linkTo(tmpList.get(49)); tmpNode.linkTo(tmpList.get(70)); tmpNode.linkTo(tmpList.get(62)); tmpNode.linkTo(tmpList.get(39)); tmpNode.linkTo(tmpList.get(31)); tmpNode.linkTo(tmpList.get(90)); tmpNode.linkTo(tmpList.get(0)); tmpNode.linkTo(tmpList.get(56)); tmpNode.linkTo(tmpList.get(94)); tmpNode.linkTo(tmpList.get(64)); tmpNode.linkTo(tmpList.get(45)); tmpNode=tmpList.get(66); tmpNode.linkTo(tmpList.get(95)); tmpNode.linkTo(tmpList.get(75)); tmpNode.linkTo(tmpList.get(91)); tmpNode.linkTo(tmpList.get(26)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(58)); tmpNode.linkTo(tmpList.get(85)); tmpNode.linkTo(tmpList.get(54)); tmpNode.linkTo(tmpList.get(48)); tmpNode.linkTo(tmpList.get(98)); tmpNode.linkTo(tmpList.get(87)); tmpNode.linkTo(tmpList.get(79)); tmpNode.linkTo(tmpList.get(62)); tmpNode.linkTo(tmpList.get(10)); tmpNode.linkTo(tmpList.get(14)); tmpNode.linkTo(tmpList.get(96)); tmpNode.linkTo(tmpList.get(34)); tmpNode.linkTo(tmpList.get(93)); tmpNode.linkTo(tmpList.get(83)); tmpNode.linkTo(tmpList.get(14)); tmpNode.linkTo(tmpList.get(73)); tmpNode.linkTo(tmpList.get(72)); tmpNode.linkTo(tmpList.get(83)); tmpNode.linkTo(tmpList.get(27)); tmpNode.linkTo(tmpList.get(56)); tmpNode=tmpList.get(12); tmpNode.linkTo(tmpList.get(86)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(7)); tmpNode.linkTo(tmpList.get(10)); tmpNode.linkTo(tmpList.get(44)); tmpNode.linkTo(tmpList.get(57)); tmpNode.linkTo(tmpList.get(27)); tmpNode.linkTo(tmpList.get(22)); tmpNode.linkTo(tmpList.get(82)); tmpNode.linkTo(tmpList.get(31)); tmpNode.linkTo(tmpList.get(5)); tmpNode.linkTo(tmpList.get(89)); tmpNode.linkTo(tmpList.get(39)); tmpNode.linkTo(tmpList.get(91)); tmpNode.linkTo(tmpList.get(36)); tmpNode.linkTo(tmpList.get(40)); tmpNode.linkTo(tmpList.get(80)); tmpNode.linkTo(tmpList.get(47)); tmpNode.linkTo(tmpList.get(65)); tmpNode.linkTo(tmpList.get(71)); tmpNode.linkTo(tmpList.get(14)); tmpNode.linkTo(tmpList.get(26)); tmpNode.linkTo(tmpList.get(7)); tmpNode.linkTo(tmpList.get(0)); tmpNode.linkTo(tmpList.get(30)); tmpNode=tmpList.get(60); tmpNode.linkTo(tmpList.get(99)); tmpNode.linkTo(tmpList.get(78)); tmpNode.linkTo(tmpList.get(21)); tmpNode.linkTo(tmpList.get(21)); tmpNode.linkTo(tmpList.get(38)); tmpNode.linkTo(tmpList.get(85)); tmpNode.linkTo(tmpList.get(7)); tmpNode.linkTo(tmpList.get(61)); tmpNode.linkTo(tmpList.get(2)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(46)); tmpNode.linkTo(tmpList.get(79)); tmpNode.linkTo(tmpList.get(19)); tmpNode.linkTo(tmpList.get(73)); tmpNode.linkTo(tmpList.get(10)); tmpNode.linkTo(tmpList.get(10)); tmpNode.linkTo(tmpList.get(39)); tmpNode.linkTo(tmpList.get(89)); tmpNode.linkTo(tmpList.get(19)); tmpNode.linkTo(tmpList.get(96)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(16)); tmpNode.linkTo(tmpList.get(37)); tmpNode.linkTo(tmpList.get(28)); tmpNode.linkTo(tmpList.get(88)); tmpNode=tmpList.get(93); tmpNode.linkTo(tmpList.get(86)); tmpNode.linkTo(tmpList.get(15)); tmpNode.linkTo(tmpList.get(34)); tmpNode.linkTo(tmpList.get(68)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(83)); tmpNode.linkTo(tmpList.get(23)); tmpNode.linkTo(tmpList.get(51)); tmpNode.linkTo(tmpList.get(49)); tmpNode.linkTo(tmpList.get(65)); tmpNode.linkTo(tmpList.get(12)); tmpNode.linkTo(tmpList.get(82)); tmpNode.linkTo(tmpList.get(82)); tmpNode.linkTo(tmpList.get(57)); tmpNode.linkTo(tmpList.get(69)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(56)); tmpNode.linkTo(tmpList.get(32)); tmpNode.linkTo(tmpList.get(32)); tmpNode.linkTo(tmpList.get(42)); tmpNode.linkTo(tmpList.get(93)); tmpNode.linkTo(tmpList.get(45)); tmpNode.linkTo(tmpList.get(25)); tmpNode.linkTo(tmpList.get(37)); tmpNode.linkTo(tmpList.get(84)); tmpNode=tmpList.get(80); tmpNode.linkTo(tmpList.get(61)); tmpNode.linkTo(tmpList.get(64)); tmpNode.linkTo(tmpList.get(18)); tmpNode.linkTo(tmpList.get(88)); tmpNode.linkTo(tmpList.get(53)); tmpNode.linkTo(tmpList.get(64)); tmpNode.linkTo(tmpList.get(94)); tmpNode.linkTo(tmpList.get(98)); tmpNode.linkTo(tmpList.get(24)); tmpNode.linkTo(tmpList.get(42)); tmpNode.linkTo(tmpList.get(35)); tmpNode.linkTo(tmpList.get(42)); tmpNode.linkTo(tmpList.get(51)); tmpNode.linkTo(tmpList.get(29)); tmpNode.linkTo(tmpList.get(8)); tmpNode.linkTo(tmpList.get(59)); tmpNode.linkTo(tmpList.get(75)); tmpNode.linkTo(tmpList.get(35)); tmpNode.linkTo(tmpList.get(26)); tmpNode.linkTo(tmpList.get(28)); tmpNode.linkTo(tmpList.get(8)); tmpNode.linkTo(tmpList.get(13)); tmpNode.linkTo(tmpList.get(67)); tmpNode.linkTo(tmpList.get(44)); tmpNode.linkTo(tmpList.get(3)); tmpNode=tmpList.get(27); tmpNode.linkTo(tmpList.get(53)); tmpNode.linkTo(tmpList.get(18)); tmpNode.linkTo(tmpList.get(44)); tmpNode.linkTo(tmpList.get(85)); tmpNode.linkTo(tmpList.get(50)); tmpNode.linkTo(tmpList.get(91)); tmpNode.linkTo(tmpList.get(15)); tmpNode.linkTo(tmpList.get(69)); tmpNode.linkTo(tmpList.get(41)); tmpNode.linkTo(tmpList.get(33)); tmpNode.linkTo(tmpList.get(59)); tmpNode.linkTo(tmpList.get(53)); tmpNode.linkTo(tmpList.get(88)); tmpNode.linkTo(tmpList.get(65)); tmpNode.linkTo(tmpList.get(34)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(79)); tmpNode.linkTo(tmpList.get(4)); tmpNode.linkTo(tmpList.get(90)); tmpNode.linkTo(tmpList.get(31)); tmpNode.linkTo(tmpList.get(51)); tmpNode.linkTo(tmpList.get(98)); tmpNode.linkTo(tmpList.get(62)); tmpNode.linkTo(tmpList.get(58)); tmpNode.linkTo(tmpList.get(91)); tmpNode=tmpList.get(58); tmpNode.linkTo(tmpList.get(50)); tmpNode.linkTo(tmpList.get(96)); tmpNode.linkTo(tmpList.get(2)); tmpNode.linkTo(tmpList.get(67)); tmpNode.linkTo(tmpList.get(67)); tmpNode.linkTo(tmpList.get(92)); tmpNode.linkTo(tmpList.get(37)); tmpNode.linkTo(tmpList.get(59)); tmpNode.linkTo(tmpList.get(7)); tmpNode.linkTo(tmpList.get(30)); tmpNode.linkTo(tmpList.get(23)); tmpNode.linkTo(tmpList.get(24)); tmpNode.linkTo(tmpList.get(43)); tmpNode.linkTo(tmpList.get(88)); tmpNode.linkTo(tmpList.get(81)); tmpNode.linkTo(tmpList.get(14)); tmpNode.linkTo(tmpList.get(67)); tmpNode.linkTo(tmpList.get(52)); tmpNode.linkTo(tmpList.get(54)); tmpNode.linkTo(tmpList.get(62)); tmpNode.linkTo(tmpList.get(50)); tmpNode.linkTo(tmpList.get(71)); tmpNode.linkTo(tmpList.get(26)); tmpNode.linkTo(tmpList.get(74)); tmpNode.linkTo(tmpList.get(70)); tmpNode=tmpList.get(67); tmpNode.linkTo(tmpList.get(98)); tmpNode.linkTo(tmpList.get(56)); tmpNode.linkTo(tmpList.get(15)); tmpNode.linkTo(tmpList.get(13)); tmpNode.linkTo(tmpList.get(88)); tmpNode.linkTo(tmpList.get(88)); tmpNode.linkTo(tmpList.get(99)); tmpNode.linkTo(tmpList.get(36)); tmpNode.linkTo(tmpList.get(19)); tmpNode.linkTo(tmpList.get(20)); tmpNode.linkTo(tmpList.get(23)); tmpNode.linkTo(tmpList.get(81)); tmpNode.linkTo(tmpList.get(70)); tmpNode.linkTo(tmpList.get(16)); tmpNode.linkTo(tmpList.get(45)); tmpNode.linkTo(tmpList.get(88)); tmpNode.linkTo(tmpList.get(58)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(71)); tmpNode.linkTo(tmpList.get(55)); tmpNode.linkTo(tmpList.get(86)); tmpNode.linkTo(tmpList.get(57)); tmpNode.linkTo(tmpList.get(47)); tmpNode.linkTo(tmpList.get(88)); tmpNode.linkTo(tmpList.get(61)); tmpNode=tmpList.get(85); tmpNode.linkTo(tmpList.get(19)); tmpNode.linkTo(tmpList.get(30)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(14)); tmpNode.linkTo(tmpList.get(41)); tmpNode.linkTo(tmpList.get(48)); tmpNode.linkTo(tmpList.get(95)); tmpNode.linkTo(tmpList.get(84)); tmpNode.linkTo(tmpList.get(66)); tmpNode.linkTo(tmpList.get(79)); tmpNode.linkTo(tmpList.get(67)); tmpNode.linkTo(tmpList.get(98)); tmpNode.linkTo(tmpList.get(6)); tmpNode.linkTo(tmpList.get(51)); tmpNode.linkTo(tmpList.get(72)); tmpNode.linkTo(tmpList.get(5)); tmpNode.linkTo(tmpList.get(28)); tmpNode.linkTo(tmpList.get(53)); tmpNode.linkTo(tmpList.get(6)); tmpNode.linkTo(tmpList.get(17)); tmpNode.linkTo(tmpList.get(29)); tmpNode.linkTo(tmpList.get(36)); tmpNode.linkTo(tmpList.get(41)); tmpNode.linkTo(tmpList.get(66)); tmpNode.linkTo(tmpList.get(89)); tmpNode=tmpList.get(8); tmpNode.linkTo(tmpList.get(28)); tmpNode.linkTo(tmpList.get(69)); tmpNode.linkTo(tmpList.get(5)); tmpNode.linkTo(tmpList.get(39)); tmpNode.linkTo(tmpList.get(89)); tmpNode.linkTo(tmpList.get(29)); tmpNode.linkTo(tmpList.get(87)); tmpNode.linkTo(tmpList.get(35)); tmpNode.linkTo(tmpList.get(29)); tmpNode.linkTo(tmpList.get(32)); tmpNode.linkTo(tmpList.get(32)); tmpNode.linkTo(tmpList.get(70)); tmpNode.linkTo(tmpList.get(21)); tmpNode.linkTo(tmpList.get(20)); tmpNode.linkTo(tmpList.get(31)); tmpNode.linkTo(tmpList.get(81)); tmpNode.linkTo(tmpList.get(39)); tmpNode.linkTo(tmpList.get(19)); tmpNode.linkTo(tmpList.get(16)); tmpNode.linkTo(tmpList.get(17)); tmpNode.linkTo(tmpList.get(80)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(90)); tmpNode.linkTo(tmpList.get(12)); tmpNode.linkTo(tmpList.get(10)); tmpNode=tmpList.get(78); tmpNode.linkTo(tmpList.get(59)); tmpNode.linkTo(tmpList.get(2)); tmpNode.linkTo(tmpList.get(93)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(67)); tmpNode.linkTo(tmpList.get(62)); tmpNode.linkTo(tmpList.get(65)); tmpNode.linkTo(tmpList.get(18)); tmpNode.linkTo(tmpList.get(93)); tmpNode.linkTo(tmpList.get(22)); tmpNode.linkTo(tmpList.get(58)); tmpNode.linkTo(tmpList.get(89)); tmpNode.linkTo(tmpList.get(7)); tmpNode.linkTo(tmpList.get(11)); tmpNode.linkTo(tmpList.get(40)); tmpNode.linkTo(tmpList.get(48)); tmpNode.linkTo(tmpList.get(26)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(32)); tmpNode.linkTo(tmpList.get(87)); tmpNode.linkTo(tmpList.get(33)); tmpNode.linkTo(tmpList.get(69)); tmpNode.linkTo(tmpList.get(7)); tmpNode.linkTo(tmpList.get(74)); tmpNode.linkTo(tmpList.get(11)); tmpNode=tmpList.get(71); tmpNode.linkTo(tmpList.get(78)); tmpNode.linkTo(tmpList.get(67)); tmpNode.linkTo(tmpList.get(46)); tmpNode.linkTo(tmpList.get(79)); tmpNode.linkTo(tmpList.get(77)); tmpNode.linkTo(tmpList.get(45)); tmpNode.linkTo(tmpList.get(39)); tmpNode.linkTo(tmpList.get(52)); tmpNode.linkTo(tmpList.get(72)); tmpNode.linkTo(tmpList.get(90)); tmpNode.linkTo(tmpList.get(5)); tmpNode.linkTo(tmpList.get(82)); tmpNode.linkTo(tmpList.get(55)); tmpNode.linkTo(tmpList.get(40)); tmpNode.linkTo(tmpList.get(33)); tmpNode.linkTo(tmpList.get(79)); tmpNode.linkTo(tmpList.get(24)); tmpNode.linkTo(tmpList.get(24)); tmpNode.linkTo(tmpList.get(6)); tmpNode.linkTo(tmpList.get(47)); tmpNode.linkTo(tmpList.get(75)); tmpNode.linkTo(tmpList.get(83)); tmpNode.linkTo(tmpList.get(28)); tmpNode.linkTo(tmpList.get(22)); tmpNode.linkTo(tmpList.get(91)); tmpNode=tmpList.get(90); tmpNode.linkTo(tmpList.get(86)); tmpNode.linkTo(tmpList.get(79)); tmpNode.linkTo(tmpList.get(79)); tmpNode.linkTo(tmpList.get(67)); tmpNode.linkTo(tmpList.get(19)); tmpNode.linkTo(tmpList.get(4)); tmpNode.linkTo(tmpList.get(39)); tmpNode.linkTo(tmpList.get(98)); tmpNode.linkTo(tmpList.get(62)); tmpNode.linkTo(tmpList.get(32)); tmpNode.linkTo(tmpList.get(36)); tmpNode.linkTo(tmpList.get(85)); tmpNode.linkTo(tmpList.get(28)); tmpNode.linkTo(tmpList.get(5)); tmpNode.linkTo(tmpList.get(22)); tmpNode.linkTo(tmpList.get(63)); tmpNode.linkTo(tmpList.get(69)); tmpNode.linkTo(tmpList.get(31)); tmpNode.linkTo(tmpList.get(49)); tmpNode.linkTo(tmpList.get(79)); tmpNode.linkTo(tmpList.get(5)); tmpNode.linkTo(tmpList.get(69)); tmpNode.linkTo(tmpList.get(54)); tmpNode.linkTo(tmpList.get(22)); tmpNode.linkTo(tmpList.get(19)); tmpNode=tmpList.get(74); tmpNode.linkTo(tmpList.get(73)); tmpNode.linkTo(tmpList.get(90)); tmpNode.linkTo(tmpList.get(87)); tmpNode.linkTo(tmpList.get(0)); tmpNode.linkTo(tmpList.get(41)); tmpNode.linkTo(tmpList.get(12)); tmpNode.linkTo(tmpList.get(92)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(87)); tmpNode.linkTo(tmpList.get(82)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(96)); tmpNode.linkTo(tmpList.get(19)); tmpNode.linkTo(tmpList.get(57)); tmpNode.linkTo(tmpList.get(62)); tmpNode.linkTo(tmpList.get(69)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(84)); tmpNode.linkTo(tmpList.get(25)); tmpNode.linkTo(tmpList.get(69)); tmpNode.linkTo(tmpList.get(77)); tmpNode.linkTo(tmpList.get(5)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(0)); tmpNode.linkTo(tmpList.get(22)); tmpNode=tmpList.get(33); tmpNode.linkTo(tmpList.get(8)); tmpNode.linkTo(tmpList.get(25)); tmpNode.linkTo(tmpList.get(21)); tmpNode.linkTo(tmpList.get(86)); tmpNode.linkTo(tmpList.get(29)); tmpNode.linkTo(tmpList.get(66)); tmpNode.linkTo(tmpList.get(73)); tmpNode.linkTo(tmpList.get(1)); tmpNode.linkTo(tmpList.get(62)); tmpNode.linkTo(tmpList.get(19)); tmpNode.linkTo(tmpList.get(84)); tmpNode.linkTo(tmpList.get(61)); tmpNode.linkTo(tmpList.get(61)); tmpNode.linkTo(tmpList.get(66)); tmpNode.linkTo(tmpList.get(82)); tmpNode.linkTo(tmpList.get(27)); tmpNode.linkTo(tmpList.get(56)); tmpNode.linkTo(tmpList.get(90)); tmpNode.linkTo(tmpList.get(4)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(73)); tmpNode.linkTo(tmpList.get(84)); tmpNode.linkTo(tmpList.get(30)); tmpNode.linkTo(tmpList.get(29)); tmpNode.linkTo(tmpList.get(32)); tmpNode=tmpList.get(72); tmpNode.linkTo(tmpList.get(65)); tmpNode.linkTo(tmpList.get(16)); tmpNode.linkTo(tmpList.get(78)); tmpNode.linkTo(tmpList.get(55)); tmpNode.linkTo(tmpList.get(30)); tmpNode.linkTo(tmpList.get(17)); tmpNode.linkTo(tmpList.get(4)); tmpNode.linkTo(tmpList.get(33)); tmpNode.linkTo(tmpList.get(81)); tmpNode.linkTo(tmpList.get(29)); tmpNode.linkTo(tmpList.get(59)); tmpNode.linkTo(tmpList.get(64)); tmpNode.linkTo(tmpList.get(8)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(91)); tmpNode.linkTo(tmpList.get(5)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(66)); tmpNode.linkTo(tmpList.get(43)); tmpNode.linkTo(tmpList.get(0)); tmpNode.linkTo(tmpList.get(99)); tmpNode.linkTo(tmpList.get(96)); tmpNode.linkTo(tmpList.get(52)); tmpNode.linkTo(tmpList.get(1)); tmpNode.linkTo(tmpList.get(43)); tmpNode=tmpList.get(22); tmpNode.linkTo(tmpList.get(57)); tmpNode.linkTo(tmpList.get(59)); tmpNode.linkTo(tmpList.get(0)); tmpNode.linkTo(tmpList.get(53)); tmpNode.linkTo(tmpList.get(46)); tmpNode.linkTo(tmpList.get(80)); tmpNode.linkTo(tmpList.get(72)); tmpNode.linkTo(tmpList.get(93)); tmpNode.linkTo(tmpList.get(48)); tmpNode.linkTo(tmpList.get(5)); tmpNode.linkTo(tmpList.get(8)); tmpNode.linkTo(tmpList.get(42)); tmpNode.linkTo(tmpList.get(36)); tmpNode.linkTo(tmpList.get(69)); tmpNode.linkTo(tmpList.get(95)); tmpNode.linkTo(tmpList.get(44)); tmpNode.linkTo(tmpList.get(51)); tmpNode.linkTo(tmpList.get(48)); tmpNode.linkTo(tmpList.get(92)); tmpNode.linkTo(tmpList.get(32)); tmpNode.linkTo(tmpList.get(17)); tmpNode.linkTo(tmpList.get(47)); tmpNode.linkTo(tmpList.get(57)); tmpNode.linkTo(tmpList.get(21)); tmpNode.linkTo(tmpList.get(38)); tmpNode=tmpList.get(57); tmpNode.linkTo(tmpList.get(25)); tmpNode.linkTo(tmpList.get(58)); tmpNode.linkTo(tmpList.get(6)); tmpNode.linkTo(tmpList.get(2)); tmpNode.linkTo(tmpList.get(28)); tmpNode.linkTo(tmpList.get(34)); tmpNode.linkTo(tmpList.get(5)); tmpNode.linkTo(tmpList.get(68)); tmpNode.linkTo(tmpList.get(56)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(53)); tmpNode.linkTo(tmpList.get(83)); tmpNode.linkTo(tmpList.get(25)); tmpNode.linkTo(tmpList.get(51)); tmpNode.linkTo(tmpList.get(39)); tmpNode.linkTo(tmpList.get(22)); tmpNode.linkTo(tmpList.get(81)); tmpNode.linkTo(tmpList.get(2)); tmpNode.linkTo(tmpList.get(77)); tmpNode.linkTo(tmpList.get(68)); tmpNode.linkTo(tmpList.get(95)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(70)); tmpNode.linkTo(tmpList.get(7)); tmpNode.linkTo(tmpList.get(26)); tmpNode=tmpList.get(73); tmpNode.linkTo(tmpList.get(59)); tmpNode.linkTo(tmpList.get(63)); tmpNode.linkTo(tmpList.get(94)); tmpNode.linkTo(tmpList.get(37)); tmpNode.linkTo(tmpList.get(40)); tmpNode.linkTo(tmpList.get(89)); tmpNode.linkTo(tmpList.get(99)); tmpNode.linkTo(tmpList.get(88)); tmpNode.linkTo(tmpList.get(12)); tmpNode.linkTo(tmpList.get(49)); tmpNode.linkTo(tmpList.get(16)); tmpNode.linkTo(tmpList.get(83)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(92)); tmpNode.linkTo(tmpList.get(4)); tmpNode.linkTo(tmpList.get(16)); tmpNode.linkTo(tmpList.get(34)); tmpNode.linkTo(tmpList.get(66)); tmpNode.linkTo(tmpList.get(79)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(11)); tmpNode.linkTo(tmpList.get(58)); tmpNode.linkTo(tmpList.get(33)); tmpNode.linkTo(tmpList.get(57)); tmpNode.linkTo(tmpList.get(10)); tmpNode=tmpList.get(7); tmpNode.linkTo(tmpList.get(0)); tmpNode.linkTo(tmpList.get(34)); tmpNode.linkTo(tmpList.get(27)); tmpNode.linkTo(tmpList.get(35)); tmpNode.linkTo(tmpList.get(35)); tmpNode.linkTo(tmpList.get(64)); tmpNode.linkTo(tmpList.get(32)); tmpNode.linkTo(tmpList.get(26)); tmpNode.linkTo(tmpList.get(72)); tmpNode.linkTo(tmpList.get(36)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(56)); tmpNode.linkTo(tmpList.get(90)); tmpNode.linkTo(tmpList.get(21)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(92)); tmpNode.linkTo(tmpList.get(99)); tmpNode.linkTo(tmpList.get(18)); tmpNode.linkTo(tmpList.get(85)); tmpNode.linkTo(tmpList.get(40)); tmpNode.linkTo(tmpList.get(68)); tmpNode.linkTo(tmpList.get(33)); tmpNode.linkTo(tmpList.get(96)); tmpNode.linkTo(tmpList.get(62)); tmpNode.linkTo(tmpList.get(19)); tmpNode=tmpList.get(23); tmpNode.linkTo(tmpList.get(43)); tmpNode.linkTo(tmpList.get(29)); tmpNode.linkTo(tmpList.get(0)); tmpNode.linkTo(tmpList.get(46)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(59)); tmpNode.linkTo(tmpList.get(16)); tmpNode.linkTo(tmpList.get(99)); tmpNode.linkTo(tmpList.get(44)); tmpNode.linkTo(tmpList.get(2)); tmpNode.linkTo(tmpList.get(87)); tmpNode.linkTo(tmpList.get(41)); tmpNode.linkTo(tmpList.get(38)); tmpNode.linkTo(tmpList.get(39)); tmpNode.linkTo(tmpList.get(73)); tmpNode.linkTo(tmpList.get(5)); tmpNode.linkTo(tmpList.get(14)); tmpNode.linkTo(tmpList.get(5)); tmpNode.linkTo(tmpList.get(74)); tmpNode.linkTo(tmpList.get(36)); tmpNode.linkTo(tmpList.get(82)); tmpNode.linkTo(tmpList.get(99)); tmpNode.linkTo(tmpList.get(94)); tmpNode.linkTo(tmpList.get(34)); tmpNode.linkTo(tmpList.get(83)); tmpNode=tmpList.get(7); tmpNode.linkTo(tmpList.get(41)); tmpNode.linkTo(tmpList.get(24)); tmpNode.linkTo(tmpList.get(66)); tmpNode.linkTo(tmpList.get(92)); tmpNode.linkTo(tmpList.get(19)); tmpNode.linkTo(tmpList.get(87)); tmpNode.linkTo(tmpList.get(72)); tmpNode.linkTo(tmpList.get(92)); tmpNode.linkTo(tmpList.get(91)); tmpNode.linkTo(tmpList.get(4)); tmpNode.linkTo(tmpList.get(30)); tmpNode.linkTo(tmpList.get(82)); tmpNode.linkTo(tmpList.get(7)); tmpNode.linkTo(tmpList.get(99)); tmpNode.linkTo(tmpList.get(64)); tmpNode.linkTo(tmpList.get(75)); tmpNode.linkTo(tmpList.get(10)); tmpNode.linkTo(tmpList.get(25)); tmpNode.linkTo(tmpList.get(83)); tmpNode.linkTo(tmpList.get(72)); tmpNode.linkTo(tmpList.get(82)); tmpNode.linkTo(tmpList.get(59)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(95)); tmpNode.linkTo(tmpList.get(77)); tmpNode=tmpList.get(30); tmpNode.linkTo(tmpList.get(82)); tmpNode.linkTo(tmpList.get(57)); tmpNode.linkTo(tmpList.get(6)); tmpNode.linkTo(tmpList.get(84)); tmpNode.linkTo(tmpList.get(44)); tmpNode.linkTo(tmpList.get(54)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(75)); tmpNode.linkTo(tmpList.get(70)); tmpNode.linkTo(tmpList.get(64)); tmpNode.linkTo(tmpList.get(80)); tmpNode.linkTo(tmpList.get(7)); tmpNode.linkTo(tmpList.get(18)); tmpNode.linkTo(tmpList.get(59)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(38)); tmpNode.linkTo(tmpList.get(77)); tmpNode.linkTo(tmpList.get(78)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(34)); tmpNode.linkTo(tmpList.get(63)); tmpNode.linkTo(tmpList.get(32)); tmpNode.linkTo(tmpList.get(62)); tmpNode.linkTo(tmpList.get(86)); tmpNode.linkTo(tmpList.get(7)); tmpNode=tmpList.get(46); tmpNode.linkTo(tmpList.get(78)); tmpNode.linkTo(tmpList.get(58)); tmpNode.linkTo(tmpList.get(79)); tmpNode.linkTo(tmpList.get(26)); tmpNode.linkTo(tmpList.get(58)); tmpNode.linkTo(tmpList.get(82)); tmpNode.linkTo(tmpList.get(16)); tmpNode.linkTo(tmpList.get(68)); tmpNode.linkTo(tmpList.get(52)); tmpNode.linkTo(tmpList.get(46)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(65)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(19)); tmpNode.linkTo(tmpList.get(24)); tmpNode.linkTo(tmpList.get(87)); tmpNode.linkTo(tmpList.get(9)); tmpNode.linkTo(tmpList.get(12)); tmpNode.linkTo(tmpList.get(42)); tmpNode.linkTo(tmpList.get(30)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(77)); tmpNode.linkTo(tmpList.get(31)); tmpNode.linkTo(tmpList.get(20)); tmpNode.linkTo(tmpList.get(45)); tmpNode=tmpList.get(40); tmpNode.linkTo(tmpList.get(81)); tmpNode.linkTo(tmpList.get(52)); tmpNode.linkTo(tmpList.get(39)); tmpNode.linkTo(tmpList.get(98)); tmpNode.linkTo(tmpList.get(72)); tmpNode.linkTo(tmpList.get(95)); tmpNode.linkTo(tmpList.get(27)); tmpNode.linkTo(tmpList.get(6)); tmpNode.linkTo(tmpList.get(12)); tmpNode.linkTo(tmpList.get(35)); tmpNode.linkTo(tmpList.get(36)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(7)); tmpNode.linkTo(tmpList.get(54)); tmpNode.linkTo(tmpList.get(59)); tmpNode.linkTo(tmpList.get(14)); tmpNode.linkTo(tmpList.get(8)); tmpNode.linkTo(tmpList.get(82)); tmpNode.linkTo(tmpList.get(98)); tmpNode.linkTo(tmpList.get(62)); tmpNode.linkTo(tmpList.get(98)); tmpNode.linkTo(tmpList.get(57)); tmpNode.linkTo(tmpList.get(28)); tmpNode.linkTo(tmpList.get(5)); tmpNode.linkTo(tmpList.get(24)); tmpNode=tmpList.get(73); tmpNode.linkTo(tmpList.get(36)); tmpNode.linkTo(tmpList.get(71)); tmpNode.linkTo(tmpList.get(89)); tmpNode.linkTo(tmpList.get(0)); tmpNode.linkTo(tmpList.get(96)); tmpNode.linkTo(tmpList.get(23)); tmpNode.linkTo(tmpList.get(92)); tmpNode.linkTo(tmpList.get(26)); tmpNode.linkTo(tmpList.get(5)); tmpNode.linkTo(tmpList.get(90)); tmpNode.linkTo(tmpList.get(86)); tmpNode.linkTo(tmpList.get(15)); tmpNode.linkTo(tmpList.get(49)); tmpNode.linkTo(tmpList.get(6)); tmpNode.linkTo(tmpList.get(92)); tmpNode.linkTo(tmpList.get(93)); tmpNode.linkTo(tmpList.get(40)); tmpNode.linkTo(tmpList.get(33)); tmpNode.linkTo(tmpList.get(69)); tmpNode.linkTo(tmpList.get(56)); tmpNode.linkTo(tmpList.get(57)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(34)); tmpNode.linkTo(tmpList.get(44)); tmpNode.linkTo(tmpList.get(6)); tmpNode=tmpList.get(30); tmpNode.linkTo(tmpList.get(58)); tmpNode.linkTo(tmpList.get(83)); tmpNode.linkTo(tmpList.get(43)); tmpNode.linkTo(tmpList.get(21)); tmpNode.linkTo(tmpList.get(46)); tmpNode.linkTo(tmpList.get(50)); tmpNode.linkTo(tmpList.get(75)); tmpNode.linkTo(tmpList.get(40)); tmpNode.linkTo(tmpList.get(68)); tmpNode.linkTo(tmpList.get(75)); tmpNode.linkTo(tmpList.get(4)); tmpNode.linkTo(tmpList.get(71)); tmpNode.linkTo(tmpList.get(9)); tmpNode.linkTo(tmpList.get(44)); tmpNode.linkTo(tmpList.get(75)); tmpNode.linkTo(tmpList.get(30)); tmpNode.linkTo(tmpList.get(92)); tmpNode.linkTo(tmpList.get(91)); tmpNode.linkTo(tmpList.get(0)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(35)); tmpNode.linkTo(tmpList.get(23)); tmpNode.linkTo(tmpList.get(43)); tmpNode.linkTo(tmpList.get(99)); tmpNode.linkTo(tmpList.get(84)); tmpNode=tmpList.get(33); tmpNode.linkTo(tmpList.get(50)); tmpNode.linkTo(tmpList.get(0)); tmpNode.linkTo(tmpList.get(77)); tmpNode.linkTo(tmpList.get(84)); tmpNode.linkTo(tmpList.get(72)); tmpNode.linkTo(tmpList.get(82)); tmpNode.linkTo(tmpList.get(46)); tmpNode.linkTo(tmpList.get(43)); tmpNode.linkTo(tmpList.get(48)); tmpNode.linkTo(tmpList.get(46)); tmpNode.linkTo(tmpList.get(73)); tmpNode.linkTo(tmpList.get(12)); tmpNode.linkTo(tmpList.get(57)); tmpNode.linkTo(tmpList.get(93)); tmpNode.linkTo(tmpList.get(95)); tmpNode.linkTo(tmpList.get(19)); tmpNode.linkTo(tmpList.get(89)); tmpNode.linkTo(tmpList.get(90)); tmpNode.linkTo(tmpList.get(46)); tmpNode.linkTo(tmpList.get(95)); tmpNode.linkTo(tmpList.get(7)); tmpNode.linkTo(tmpList.get(59)); tmpNode.linkTo(tmpList.get(50)); tmpNode.linkTo(tmpList.get(86)); tmpNode.linkTo(tmpList.get(73)); tmpNode=tmpList.get(71); tmpNode.linkTo(tmpList.get(36)); tmpNode.linkTo(tmpList.get(56)); tmpNode.linkTo(tmpList.get(63)); tmpNode.linkTo(tmpList.get(29)); tmpNode.linkTo(tmpList.get(43)); tmpNode.linkTo(tmpList.get(51)); tmpNode.linkTo(tmpList.get(14)); tmpNode.linkTo(tmpList.get(68)); tmpNode.linkTo(tmpList.get(85)); tmpNode.linkTo(tmpList.get(8)); tmpNode.linkTo(tmpList.get(20)); tmpNode.linkTo(tmpList.get(13)); tmpNode.linkTo(tmpList.get(48)); tmpNode.linkTo(tmpList.get(47)); tmpNode.linkTo(tmpList.get(7)); tmpNode.linkTo(tmpList.get(25)); tmpNode.linkTo(tmpList.get(55)); tmpNode.linkTo(tmpList.get(5)); tmpNode.linkTo(tmpList.get(36)); tmpNode.linkTo(tmpList.get(65)); tmpNode.linkTo(tmpList.get(11)); tmpNode.linkTo(tmpList.get(29)); tmpNode.linkTo(tmpList.get(39)); tmpNode.linkTo(tmpList.get(50)); tmpNode.linkTo(tmpList.get(19)); tmpNode=tmpList.get(40); tmpNode.linkTo(tmpList.get(52)); tmpNode.linkTo(tmpList.get(87)); tmpNode.linkTo(tmpList.get(51)); tmpNode.linkTo(tmpList.get(41)); tmpNode.linkTo(tmpList.get(37)); tmpNode.linkTo(tmpList.get(35)); tmpNode.linkTo(tmpList.get(93)); tmpNode.linkTo(tmpList.get(78)); tmpNode.linkTo(tmpList.get(31)); tmpNode.linkTo(tmpList.get(13)); tmpNode.linkTo(tmpList.get(62)); tmpNode.linkTo(tmpList.get(80)); tmpNode.linkTo(tmpList.get(17)); tmpNode.linkTo(tmpList.get(16)); tmpNode.linkTo(tmpList.get(70)); tmpNode.linkTo(tmpList.get(28)); tmpNode.linkTo(tmpList.get(36)); tmpNode.linkTo(tmpList.get(94)); tmpNode.linkTo(tmpList.get(6)); tmpNode.linkTo(tmpList.get(79)); tmpNode.linkTo(tmpList.get(68)); tmpNode.linkTo(tmpList.get(7)); tmpNode.linkTo(tmpList.get(6)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(38)); tmpNode=tmpList.get(3); tmpNode.linkTo(tmpList.get(83)); tmpNode.linkTo(tmpList.get(24)); tmpNode.linkTo(tmpList.get(99)); tmpNode.linkTo(tmpList.get(55)); tmpNode.linkTo(tmpList.get(15)); tmpNode.linkTo(tmpList.get(77)); tmpNode.linkTo(tmpList.get(11)); tmpNode.linkTo(tmpList.get(25)); tmpNode.linkTo(tmpList.get(1)); tmpNode.linkTo(tmpList.get(69)); tmpNode.linkTo(tmpList.get(31)); tmpNode.linkTo(tmpList.get(55)); tmpNode.linkTo(tmpList.get(57)); tmpNode.linkTo(tmpList.get(65)); tmpNode.linkTo(tmpList.get(40)); tmpNode.linkTo(tmpList.get(36)); tmpNode.linkTo(tmpList.get(68)); tmpNode.linkTo(tmpList.get(51)); tmpNode.linkTo(tmpList.get(28)); tmpNode.linkTo(tmpList.get(92)); tmpNode.linkTo(tmpList.get(57)); tmpNode.linkTo(tmpList.get(16)); tmpNode.linkTo(tmpList.get(85)); tmpNode.linkTo(tmpList.get(26)); tmpNode.linkTo(tmpList.get(39)); tmpNode=tmpList.get(43); tmpNode.linkTo(tmpList.get(58)); tmpNode.linkTo(tmpList.get(2)); tmpNode.linkTo(tmpList.get(75)); tmpNode.linkTo(tmpList.get(35)); tmpNode.linkTo(tmpList.get(4)); tmpNode.linkTo(tmpList.get(23)); tmpNode.linkTo(tmpList.get(30)); tmpNode.linkTo(tmpList.get(23)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(14)); tmpNode.linkTo(tmpList.get(19)); tmpNode.linkTo(tmpList.get(62)); tmpNode.linkTo(tmpList.get(31)); tmpNode.linkTo(tmpList.get(53)); tmpNode.linkTo(tmpList.get(61)); tmpNode.linkTo(tmpList.get(22)); tmpNode.linkTo(tmpList.get(83)); tmpNode.linkTo(tmpList.get(5)); tmpNode.linkTo(tmpList.get(95)); tmpNode.linkTo(tmpList.get(73)); tmpNode.linkTo(tmpList.get(4)); tmpNode.linkTo(tmpList.get(83)); tmpNode.linkTo(tmpList.get(18)); tmpNode.linkTo(tmpList.get(45)); tmpNode.linkTo(tmpList.get(20)); tmpNode=tmpList.get(29); tmpNode.linkTo(tmpList.get(2)); tmpNode.linkTo(tmpList.get(5)); tmpNode.linkTo(tmpList.get(22)); tmpNode.linkTo(tmpList.get(96)); tmpNode.linkTo(tmpList.get(14)); tmpNode.linkTo(tmpList.get(35)); tmpNode.linkTo(tmpList.get(73)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(21)); tmpNode.linkTo(tmpList.get(41)); tmpNode.linkTo(tmpList.get(1)); tmpNode.linkTo(tmpList.get(83)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(42)); tmpNode.linkTo(tmpList.get(76)); tmpNode.linkTo(tmpList.get(35)); tmpNode.linkTo(tmpList.get(63)); tmpNode.linkTo(tmpList.get(74)); tmpNode.linkTo(tmpList.get(72)); tmpNode.linkTo(tmpList.get(36)); tmpNode.linkTo(tmpList.get(70)); tmpNode.linkTo(tmpList.get(39)); tmpNode.linkTo(tmpList.get(18)); tmpNode.linkTo(tmpList.get(3)); tmpNode.linkTo(tmpList.get(40)); tmpNode=tmpList.get(44); tmpNode.linkTo(tmpList.get(82)); tmpNode.linkTo(tmpList.get(9)); tmpNode.linkTo(tmpList.get(58)); tmpNode.linkTo(tmpList.get(59)); tmpNode.linkTo(tmpList.get(93)); tmpNode.linkTo(tmpList.get(80)); tmpNode.linkTo(tmpList.get(72)); tmpNode.linkTo(tmpList.get(91)); tmpNode.linkTo(tmpList.get(82)); tmpNode.linkTo(tmpList.get(73)); tmpNode.linkTo(tmpList.get(66)); tmpNode.linkTo(tmpList.get(8)); tmpNode.linkTo(tmpList.get(18)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(13)); tmpNode.linkTo(tmpList.get(62)); tmpNode.linkTo(tmpList.get(49)); tmpNode.linkTo(tmpList.get(81)); tmpNode.linkTo(tmpList.get(35)); tmpNode.linkTo(tmpList.get(55)); tmpNode.linkTo(tmpList.get(7)); tmpNode.linkTo(tmpList.get(19)); tmpNode.linkTo(tmpList.get(15)); tmpNode.linkTo(tmpList.get(19)); tmpNode.linkTo(tmpList.get(77)); tmpNode=tmpList.get(73); tmpNode.linkTo(tmpList.get(28)); tmpNode.linkTo(tmpList.get(23)); tmpNode.linkTo(tmpList.get(4)); tmpNode.linkTo(tmpList.get(85)); tmpNode.linkTo(tmpList.get(52)); tmpNode.linkTo(tmpList.get(18)); tmpNode.linkTo(tmpList.get(40)); tmpNode.linkTo(tmpList.get(31)); tmpNode.linkTo(tmpList.get(28)); tmpNode.linkTo(tmpList.get(42)); tmpNode.linkTo(tmpList.get(37)); tmpNode.linkTo(tmpList.get(83)); tmpNode.linkTo(tmpList.get(99)); tmpNode.linkTo(tmpList.get(71)); tmpNode.linkTo(tmpList.get(47)); tmpNode.linkTo(tmpList.get(77)); tmpNode.linkTo(tmpList.get(23)); tmpNode.linkTo(tmpList.get(65)); tmpNode.linkTo(tmpList.get(81)); tmpNode.linkTo(tmpList.get(49)); tmpNode.linkTo(tmpList.get(68)); tmpNode.linkTo(tmpList.get(72)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(79)); tmpNode.linkTo(tmpList.get(32)); tmpNode=tmpList.get(23); tmpNode.linkTo(tmpList.get(44)); tmpNode.linkTo(tmpList.get(81)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(60)); tmpNode.linkTo(tmpList.get(63)); tmpNode.linkTo(tmpList.get(93)); tmpNode.linkTo(tmpList.get(32)); tmpNode.linkTo(tmpList.get(46)); tmpNode.linkTo(tmpList.get(6)); tmpNode.linkTo(tmpList.get(8)); tmpNode.linkTo(tmpList.get(95)); tmpNode.linkTo(tmpList.get(28)); tmpNode.linkTo(tmpList.get(49)); tmpNode.linkTo(tmpList.get(42)); tmpNode.linkTo(tmpList.get(37)); tmpNode.linkTo(tmpList.get(51)); tmpNode.linkTo(tmpList.get(53)); tmpNode.linkTo(tmpList.get(80)); tmpNode.linkTo(tmpList.get(64)); tmpNode.linkTo(tmpList.get(55)); tmpNode.linkTo(tmpList.get(47)); tmpNode.linkTo(tmpList.get(27)); tmpNode.linkTo(tmpList.get(10)); tmpNode.linkTo(tmpList.get(43)); tmpNode.linkTo(tmpList.get(93)); tmpNode=tmpList.get(6); tmpNode.linkTo(tmpList.get(75)); tmpNode.linkTo(tmpList.get(36)); tmpNode.linkTo(tmpList.get(15)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(38)); tmpNode.linkTo(tmpList.get(41)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(97)); tmpNode.linkTo(tmpList.get(48)); tmpNode.linkTo(tmpList.get(27)); tmpNode.linkTo(tmpList.get(70)); tmpNode.linkTo(tmpList.get(70)); tmpNode.linkTo(tmpList.get(75)); tmpNode.linkTo(tmpList.get(53)); tmpNode.linkTo(tmpList.get(2)); tmpNode.linkTo(tmpList.get(65)); tmpNode.linkTo(tmpList.get(86)); tmpNode.linkTo(tmpList.get(44)); tmpNode.linkTo(tmpList.get(20)); tmpNode.linkTo(tmpList.get(71)); tmpNode.linkTo(tmpList.get(79)); tmpNode.linkTo(tmpList.get(88)); tmpNode.linkTo(tmpList.get(54)); tmpNode.linkTo(tmpList.get(86)); tmpNode.linkTo(tmpList.get(69)); // calculate the paths ShortestPathFinder spf=new ShortestPathFinder(); spf.calculatePaths(tmpList); } class StringNode extends AbstractSPNode<StringNode> { String str=null; public StringNode(String s) { super(); if(s == null) { throw new NullPointerException("s can't be null"); } str=s; } @Override public String toString() { return("{StringNode " + str + "}"); } public String getString() { return(str); } @Override public void linkTo(StringNode x, int cost) { super.linkTo(x, cost); } @Override public void linkTo(StringNode x) { super.linkTo(x); } private String indent(int indentation) { StringBuffer sb=new StringBuffer(indentation); for(int i=0; i<indentation; i++) { sb.append(' '); } return (sb.toString()); } @SuppressWarnings("unchecked") public void dump() { Set s=new java.util.HashSet(); dump(0, s); } @SuppressWarnings("unchecked") public void dump(int indentation, Set s) { System.out.println(indent(indentation) + this); // Find out what we have maps to for(StringNode sn : nodes.values()) { SPVertex vert=getNextHop(sn); if(vert != null) { System.out.println(indent(indentation + 4) + " --> " + sn.getString() + " via " + vert.getTo() + "@" + vert.getCost()); } } // Dump out the connections for(SPVertex spv : getConnections()) { if (! s.contains(spv.getTo())) { s.add(spv.getTo()); StringNode sn=(StringNode)spv.getTo(); sn.dump(indentation+2, s); } } } @Override public int hashCode() { return(str.hashCode()); } public int compareTo(StringNode sn) { return (str.compareTo(sn.getString())); } } }