public Set<List<String>> runOne(List<String> decisionAttributes, int maxNumAttrToConsider){
		//Print to the GUI the needed info from this section
		UserInterface.logData.setText(UserInterface.logData.getText() + "Decision Attributes: " + decisionAttributes + "\n");
		//Print out our possible values for all decision attributes to the GUI
		
		for(int i=0;i<decisionAttributes.size();i++){
			UserInterface.logData.setText(UserInterface.logData.getText() + "Distribution of values for attribute " + decisionAttributes.get(i) + "\n");
			HashMap<String,Integer> possibleValues = getPossibleValuesFor(relation.attributeData.get(attributeIndexMap.get(decisionAttributes.get(i))).instanceValues);
			for(String key:possibleValues.keySet()){
				UserInterface.logData.setText(UserInterface.logData.getText() + "Value: " + key + " Occurrences: " + possibleValues.get(key) + "\n");
			}
			UserInterface.logData.setText(UserInterface.logData.getText() + "\n");
		}
		
		//Get the partition for the decision attributes
		decisionPartition = computePartition(decisionAttributes);
		
		//Get the set of non decision attributes to run partitions on
		Set<String> nonDecisionAttributeSet = new HashSet<String>();
		for(Attribute oneAttr:relation.attributeData) {
			if(!decisionAttributes.contains(oneAttr.instanceName)) {
//				System.out.println("This one was non dec - put in set: " + oneAttr.instanceName);
				nonDecisionAttributeSet.add(oneAttr.instanceName);
			}	
		}
		
		//Now iterate through all these combinations and calculate possible partitions --> coverings
		for(Set<String> one : powerSet(nonDecisionAttributeSet)){
			List<String> temp = new ArrayList<String>();
			temp.addAll(one);
			//Only check if it is not empty and does not exceed the max to consider
			if(temp.size() != 0 && temp.size() <= maxNumAttrToConsider){checkIsCovering(temp);}
		}
		return allCoverings;
	}