public static List<MoleculeState> getIsomers(int carbons, Bond primaryBond) {
		List<MoleculeState> states = new ArrayList<>();
		final HashSet<String> existing = new HashSet<String>();
		Queue<MoleculeState> currentStates = new LinkedList<MoleculeState>() {
			@Override
			public boolean add(MoleculeState state) {
				if(existing.contains(state.getName()))
					return false;
				
				existing.add(state.getName());
				return super.add(state);
			}
			
			@Override
			public boolean addAll(Collection<? extends MoleculeState> states) {
				for(MoleculeState state : states)
					add(state);
				
				return true;
			}
		};
		
		MoleculeState origin = new MoleculeState(new Molecule(1), false, primaryBond);
		currentStates.offer(origin);
		
		while(!currentStates.isEmpty()) {
			MoleculeState state = currentStates.poll();
			if(state.getSize() == carbons) {
				states.add(state);
				continue;
			}
			
			currentStates.addAll(state.nextStates());
		}
		
		ListIterator<MoleculeState> snipper = states.listIterator();
		while(snipper.hasNext()) {
			if(snipper.next().needsSignificantBond()) snipper.remove();
		}
		
		return states;
	}