private AlgebraicParticle construct(Map<AlgebraicParticle, Integer> map) {
		Set<Entry<AlgebraicParticle, Integer>> set = map.entrySet();
		if(set.size() == 0) return Number.ONE;
		
		//keep track of coefficient (will be multiplying integer factors shortly)
		int coefficient = 1;
		
		//check for a factor of negative one and remove it and set sign to negative if found
		boolean sign = true;
		if(map.containsKey(Number.NEGATIVE_ONE)) {
			sign = false;
			map.remove(Number.NEGATIVE_ONE);
		}
		
		//there must be multiple factors to raise to their respective powers
		ArrayList<AlgebraicParticle> factors = new ArrayList<AlgebraicParticle>(set.size());
		for(Entry<AlgebraicParticle, Integer> entry : set) {
			AlgebraicParticle alg = entry.getKey();
			int exponent = entry.getValue();
			//if it's an integer multiply it by the coefficient
			if(alg instanceof Number 
					&& ((Number)alg).isInteger()) coefficient *= Math.pow(Integer.parseInt(((Number)alg).getInteger()), exponent);
			//otherwise adjust its exponent
			else factors.add(alg.cloneWithNewSignAndExponent(alg.sign(), exponent));
		}
		
		//push the coefficient to the beginning of the list
		if(coefficient != 1) factors.add(0, new Number(true, Integer.toString(coefficient), null, null, 1));
		
		//determine the result and return
		if(factors.size() == 1) return factors.get(0).cloneWithNewSign(sign);
		else return new Term(sign, factors, 1);
	}