private void backTrackingAfter3() {
		FeatureGenerator fg=new FeatureGenerator();
		
		double result=0.0;
		String antFeature=featureModelBruteForce;
		double difference=0.0;
		//ADD FEATURES TO THE POOL. 
		//If we have 3...	
		//  {f1,f2,f3} => { {f1},{f2},{f3},{f1,f2},{f1,f3},{f2,f3},{f1,f2,f3} } 
		//
		ArrayList<String> pool = new ArrayList<String>();
		String structure="Stack";
		if (bestAlgorithm.contains("cov")) 
			structure="Left";
		
		String structureI="Input";
		if (bestAlgorithm.contains("cov")) 
			structureI="Right";
		if (bestAlgorithm.contains("stack")) 
			structureI="Lookahead";
		pool=new ArrayList<String>();
		if (bestAlgorithm.contains("stack")) {
			pool.add("\t\t<feature>Merge3(InputColumn(POSTAG, "+structure+"[0]), OutputColumn(DEPREL, ldep("+structure+"[0])), OutputColumn(DEPREL, rdep("+structure+"[0])))</feature>");
			pool.add("\t\t<feature>Merge3(InputColumn(POSTAG, "+structure+"[1]), OutputColumn(DEPREL, ldep("+structure+"[1])), OutputColumn(DEPREL, rdep("+structure+"[1])))</feature>");
			pool.add("\t\t<feature>Merge(InputColumn(POSTAG, Stack[1]), OutputColumn(DEPREL, ldep(Stack[1])))</feature>");
			pool.add("\t\t<feature>Merge(InputColumn(POSTAG, Stack[1]), OutputColumn(DEPREL, ldep(Stack[0])))</feature>");
			pool.add("\t\t<feature>Merge(InputColumn(POSTAG, Stack[2]), OutputColumn(DEPREL, ldep(Stack[0])))</feature>");
			pool.add("\t\t<feature>Merge(InputColumn(POSTAG, Lookahead[0]), OutputColumn(DEPREL, ldep(Stack[0])))</feature>");
			pool.add("\t\t<feature>Merge(InputColumn(POSTAG, Lookahead[0]), OutputColumn(DEPREL, rdep(Stack[0])))</feature>");
		}
		if (bestAlgorithm.contains("nivre")) {
			pool.add("\t\t<feature>Merge3(InputColumn(POSTAG, Stack[0]), OutputColumn(DEPREL, ldep(Stack[0])), OutputColumn(DEPREL, rdep(Stack[0])))</feature>");
			pool.add("\t\t<feature>Merge(InputColumn(POSTAG, Stack[0]), OutputColumn(DEPREL, Stack[0]))</feature>");
			pool.add("\t\t<feature>Merge(InputColumn(POSTAG, Input[0]), OutputColumn(DEPREL, ldep(Input[0])))</feature>");
			pool.add("\t\t<feature>Merge(InputColumn(POSTAG, Input[0]), OutputColumn(DEPREL, rdep(Input[0])))</feature>");
			pool.add("\t\t<feature>Merge(InputColumn(POSTAG, Input[1]), OutputColumn(DEPREL, rdep(Input[0])))</feature>");
			pool.add("\t\t<feature>Merge(InputColumn(POSTAG, Input[2]), OutputColumn(DEPREL, rdep(Input[0])))</feature>");
		}
		if (bestAlgorithm.contains("cov")) {
			pool.add("\t\t<feature>Merge3(InputColumn(POSTAG, Left[0]), OutputColumn(DEPREL, ldep(Left[0])), OutputColumn(DEPREL, rdep(Left[0])))</feature>");
			pool.add("\t\t<feature>Merge(InputColumn(POSTAG, Left[0]), OutputColumn(DEPREL, Left[0]))</feature>");
			pool.add("\t\t<feature>Merge(InputColumn(POSTAG, Right[0]), OutputColumn(DEPREL, ldep(Right[0])))</feature>");
			pool.add("\t\t<feature>Merge(InputColumn(POSTAG, Right[0]), OutputColumn(DEPREL, Right[0]))</feature>");
			pool.add("\t\t<feature>Merge3(InputColumn(POSTAG, Left[1]), InputColumn(POSTAG, Left[0]), InputColumn(POSTAG, Right[0]))</feature>");
			pool.add("\t\t<feature>Merge3(InputColumn(POSTAG, Left[0]), InputColumn(POSTAG, Right[0]), InputColumn(POSTAG, Right[1]))</feature>");
			pool.add("\t\t<feature>Merge3(InputColumn(POSTAG, Right[0]), InputColumn(POSTAG, Right[1]), InputColumn(POSTAG, Right[2]))</feature>");
			pool.add("\t\t<feature>Merge3(InputColumn(POSTAG, Right[1]), InputColumn(POSTAG, Right[2]), InputColumn(POSTAG, Right[3]))</feature>");
			
		}
				
		Iterator<String> it=pool.iterator();
		String newFeature="deprelBT"+structure+structureI;
		int a=0;
		while(it.hasNext()){
			newFeature="deprelMergeBT"+structure+structureI+a+".xml";
			fg.addFeatureLineBefore(featureModelBruteForce,newFeature,it.next(),"Merge","DEPREL");
			a++;
			antFeature=newFeature;
			System.out.println("Testing "+newFeature +" ...");
			result=runBestAlgorithm(newFeature);
			difference=0.0;
			System.out.println("  "+result);
			System.out.println("  Default: "+bestResult);
			if (result>=(this.bestResultBruteForce+threshold)) { 
				this.featureModelBruteForce=antFeature; //dummy (just a matter of completity)
				difference=result-bestResultBruteForce;
				bestResultBruteForce=result;
				String sDifferenceLabel=""+difference;
				if (sDifferenceLabel.length()>5)
					sDifferenceLabel=sDifferenceLabel.substring(0, 5);
				/*System.out.println("New best feature model: "+featureModelBruteForce);
				String s=""+this.bestResult;
			if (s.length()==4) s+="0";
			
			System.out.println("Incremental "+evaluationMeasure+" improvement: + "+sDifferenceLabel+"% ("+s+"%)");*/
				
			}
		}
	}