private TreeSet<Connectable> recursiveDFS(Connectable damOrRiver, TreeSet<Connectable> completedIndexs, TreeSet<Connectable> tmpList){
		if(completedIndexs.contains(damOrRiver)){
			if(tmpList != null)
				completedIndexs.addAll(tmpList);
			return completedIndexs; // If it has already been solved, stop
		}
		if(damOrRiver.getDownstream() == null)
			return completedIndexs;
		// If it is trivial stop
		if(damOrRiver.getDownstream().equals(getOcean())){
			completedIndexs.add(damOrRiver);
			if(tmpList != null)
				completedIndexs.addAll(tmpList);
			return completedIndexs;
		}
		// If this is the first, create the list and check the next one
		if(tmpList == null){
			tmpList = new TreeSet<Connectable>();
			tmpList.add(damOrRiver);
			return recursiveDFS(damOrRiver.getDownstream(), completedIndexs, tmpList);
		}
		// tmpList is not null
		// If damOrRiver has already been checked we can stop
		if(tmpList.contains(damOrRiver))
			return completedIndexs; // There is a loop somewhere so not valid
		// Not the first and hasn't been checked
		tmpList.add(damOrRiver);
		return recursiveDFS(damOrRiver.getDownstream(), completedIndexs, tmpList);
	}