private String constructQuery(String indexedRule) {
		ArrayList<String> RPNRule = translateToRPN(indexedRule);
		ArrayList<Boolean> translatedFlagList = new ArrayList<Boolean>();
		
		for (int i = 0; i < RPNRule.size(); i++)
			translatedFlagList.add(false);
		
		if (RPNRule.size() == 1)
			RPNRule.set(0, translateIndexToQuery(RPNRule.get(0), translatedFlagList.get(0)));
		else {
			int RPNIndex = 0;
			while (RPNRule.size() > 1) {
				if (RPNRule.get(RPNIndex + 2).equalsIgnoreCase(".") || RPNRule.get(RPNIndex + 2).equalsIgnoreCase("+")) {
					String tmpRule = "(" + translateIndexToQuery(RPNRule.get(RPNIndex), translatedFlagList.get(RPNIndex)) + ") " + translateIndexToQuery(RPNRule.get(RPNIndex + 2), translatedFlagList.get(RPNIndex + 2)) + " (" + translateIndexToQuery(RPNRule.get(RPNIndex + 1), translatedFlagList.get(RPNIndex + 1)) + ")";
					RPNRule.subList(RPNIndex, RPNIndex + 3).clear();
					translatedFlagList.subList(RPNIndex, RPNIndex + 3).clear();
					RPNRule.add(RPNIndex, tmpRule);
					translatedFlagList.add(RPNIndex, true);
					RPNIndex--;
				} else {
					RPNIndex++;
				}
			}
		}
		
		return RPNRule.get(0);
	}