public static void updateComponents() {
		if (ViralSpread.debug) { // Print out all of the connections.
			System.out.println("----");
			for (Person[] c : hardConnections) {
				System.out.println(c[0] +"\t\t"+ c[1]);
			}
		}
		
		// Create an ordered copy of the list of connections so that we can modify it.
		LinkedList<Person[]> connectionsCopy = new LinkedList<Person[]>();
		for (Person[] connection : hardConnections)
			connectionsCopy.add(connection);
		// Discover the set of components.
		HashSet<LinkedList<Person>> newComponents = new HashSet<LinkedList<Person>>();
		updateComponentConnections(newComponents, connectionsCopy);
		components = newComponents;
		
		if (ViralSpread.debug) { // Print out each component.
			System.out.println();
			for (LinkedList<Person> component : components) {
				System.out.println(component.size() +" "+ component.get(0).getVirus());
				for (Person p : component) {
					System.out.println("\t"+ p);
				}
			}
		}
	}