public static HashMap<Integer, Integer> backTracking(SchedulingProblem csp, ArrayList<Integer> assignmentCount)
	{
		if (isComplete(csp))
		{
			return csp.Assignment;
		}
		
		Integer selectedVar;
		ArrayList<Integer> mostConstrainedVars = csp.getMostConstrainedMeeting();
		if(mostConstrainedVars.size() != 1)
		{
			selectedVar = csp.getMostConstrainingMeeting(mostConstrainedVars);
		}else
		{
			selectedVar = mostConstrainedVars.get(0);
		}
		
		ArrayList<Integer> slots  = new ArrayList<Integer>();
		slots.addAll(csp.OrderedTimeslots(selectedVar));
		for (Integer valueSlot : slots)
		{
			if(csp.isValid(selectedVar, valueSlot)){
				csp.addAssignment(selectedVar, valueSlot);
				assignmentCount.set(0, assignmentCount.get(0) + 1);
//				try {
//					writer.write("ASSIGNMENT: " + csp.Assignment.toString() + "\n");
//				} catch (IOException e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
				if(csp.fowardChecking() == false)
				{
					csp.removeAssignment(selectedVar);
					return null;
				}
				
				HashMap<Integer, Integer> result = backTracking(csp, assignmentCount);
				if(result != null)
				{
					return result;
				}
				
				csp.removeAssignment(selectedVar);
			}
		}
		return null;
	}