public static boolean balanced(ChemistryUnit inExpression, ChemistryUnit outExpression){
		ChemistryUnit apartInExpression = apart(inExpression);
		ChemistryUnit apartOutExpression = apart(outExpression);
		for(Map.Entry<ChemistryUnit, Integer> outEntry : apartOutExpression.getUnitEntrySet()){
			Debug.print(outEntry + ";");
		}
		Debug.println();
		for(Map.Entry<ChemistryUnit, Integer> inEntry : apartInExpression.getUnitEntrySet()){
			Debug.print(inEntry + ";");
			ChemistryUnit inKey = inEntry.getKey();
			if(inKey.getType() == ChemistryUnit.TYPE_NEST){
				Debug.println();
				throw new IllegalArgumentException("Illegal in - separation!");
			}
			if(!apartOutExpression.containsUnitKey(inKey) || !apartOutExpression.getUnit(inKey).equals(inEntry.getValue())){
				Debug.println();
				Debug.println(inKey + ":" + apartOutExpression.getUnit(inKey) + ":" + inEntry.getValue() + ";");
				Debug.println("Not Balanced!");
				Debug.println();
				return false;
			}
		}
		for(Map.Entry<ChemistryUnit, Integer> outEntry : apartOutExpression.getUnitEntrySet()){
			ChemistryUnit inKey = outEntry.getKey();
			if(!apartOutExpression.containsUnitKey(inKey)){
				Debug.println();
				Debug.println("Not Balanced!");
				Debug.println();
				return false;
			}
		}
		Debug.println();
		Debug.println("Balanced!");
		Debug.println();
		return true;
	}