public static String name(Molecule molecule) {
		List<List<Atom>> max = molecule.maximalPaths();
		// System.out.println(max.size() + " maximal paths found.");
		
		String optimalName = "";
		int startIndex = Integer.MAX_VALUE;
		for(List<Atom> bestPath : max) {
			Map<String, List<Integer>> branches = new TreeMap<>(); // Branch Length -> Branch Positions
			int smallestIndex = Integer.MAX_VALUE;
			for(int x = 0; x < bestPath.size(); x++) {
				for(Atom adj : bestPath.get(x).connections) {
					if(bestPath.contains(adj)) continue;
					
					int length = count(adj, bestPath.get(x));
					String lengthName = PREFIX[length - 1];
					if(!branches.containsKey(lengthName))
						branches.put(lengthName, new ArrayList<Integer>());
					
					branches.get(lengthName).add(x + 1);
					smallestIndex = Math.min(smallestIndex, x + 1);
				}
			}
			
			StringBuilder res = new StringBuilder();
			
			for(String branch : branches.keySet()) {
				List<Integer> nums = branches.get(branch);
				res.append(nums.toString().replaceAll("[\\[\\] ]", ""));
				res.append("-");
				res.append(((nums.size() == 1) ? "" : BRANCH_PREFIX[nums.size() - 1]) + (branch + "yl"));
				res.append("-");
			}
			
			if(branches.size() > 0)
				res.deleteCharAt(res.length() - 1);
			
			res.append(PREFIX[bestPath.size() - 1] + "ane");
			
			//System.out.println(branches);
			System.out.println("OPTION: " + res.toString());
			
			if(smallestIndex < startIndex) {
				startIndex = smallestIndex;
				optimalName = res.toString();
			}
		}
		
		return optimalName;
	}