private static ChemistryUnit apart(ChemistryUnit unit){
		if(unit.getType() == ChemistryUnit.TYPE_BASE){
			return unit;
		}
		ChemistryUnit unitValue = new ChemistryUnit();
		for(Map.Entry<ChemistryUnit, Integer> unitPart : unit.getUnitEntrySet()){
			ChemistryUnit unitPartValue = new ChemistryUnit();
			ChemistryUnit unitPartApartValue = apart(unitPart.getKey());
			if(unitPartApartValue.getType() == ChemistryUnit.TYPE_BASE){
				unitPartValue.putUnit(unitPartApartValue, 1);
			}
			else{
				for(Map.Entry<ChemistryUnit, Integer> xZero : unitPartApartValue.getUnitEntrySet()){
					ChemistryUnit xKey = xZero.getKey();
					if(unitPartValue.containsUnitKey(xKey)){
						unitPartValue.putUnit(xKey, unitPartApartValue.getUnit(xKey) + xZero.getValue());
					}
					else{
						unitPartValue.putUnit(xKey, xZero.getValue());
					}
				}
			}
			for(Map.Entry<ChemistryUnit, Integer> un : unitPartValue.getUnitEntrySet()){
				ChemistryUnit unKey = un.getKey();
				if(unitValue.containsUnitKey(unKey)){
					unitValue.putUnit(unKey, unitValue.getUnit(unKey) + unitPartValue.getUnit(unKey) * unitPart.getValue());
				}
				else{
					unitValue.putUnit(unKey, unitPartValue.getUnit(unKey) * unitPart.getValue());
				}
			}
		}
		return unitValue;
	}