private String huristicksCalculator(Model model) {
	
	
		
		
		String theHintAndNumOfEmptyCellsThatWillBe = "";
		
		Model modelCopy1 = new Game2048Model((Game2048Model)model);
		Model modelCopy2 = new Game2048Model((Game2048Model)model);
		Model modelCopy3 = new Game2048Model((Game2048Model)model);
		Model modelCopy4 = new Game2048Model((Game2048Model)model);
		
		
		//4 directions
		
		//UP
		modelCopy1.doUserCommand(1);
		//DOWN
		modelCopy2.doUserCommand(2);
		//RIGHT
		modelCopy3.doUserCommand(3);
		//LEFT
		modelCopy4.doUserCommand(4);
		
		
		//get the best move
		int max = numOfemptyCellsFoo(model);
		
		
		int numOfEmptyCells1 = numOfemptyCellsFoo(modelCopy1);
		int numOfEmptyCells2 = numOfemptyCellsFoo(modelCopy2);
		int numOfEmptyCells3 = numOfemptyCellsFoo(modelCopy3);
		int numOfEmptyCells4 = numOfemptyCellsFoo(modelCopy4);
		
		if(numOfEmptyCells1 >= max){
			max = numOfEmptyCells1;
			theHintAndNumOfEmptyCellsThatWillBe = "UP" + "," + max;
		}
		if(numOfEmptyCells3 >= numOfEmptyCells2){
			max = numOfEmptyCells3;
			theHintAndNumOfEmptyCellsThatWillBe = "RIGHT" + "," + max;
		}
		if(numOfEmptyCells4 >= numOfEmptyCells3){
			max = numOfEmptyCells4;
			theHintAndNumOfEmptyCellsThatWillBe = "LEFT" + "," + max;
		}
		if(numOfEmptyCells2 >= numOfEmptyCells1){
			max = numOfEmptyCells2;
			theHintAndNumOfEmptyCellsThatWillBe = "DOWN" + "," + max;
		}
		if(numOfEmptyCells4 >= numOfEmptyCells3){
			max = numOfEmptyCells4;
			theHintAndNumOfEmptyCellsThatWillBe = "LEFT" + "," + max;
		}
	
		
		return theHintAndNumOfEmptyCellsThatWillBe;
	
		
		
		/**
		 * 
		 * random huristicks
		 */
		/*
		String[] theHints = {"UP","DOWN","RIGHT","LEFT"};
		Random rand = new Random();
		int index = rand.nextInt(4)+1;
		switch (index) {
		case 1:
			return "UP";
			
		case 2:
			return "DOWN";
			
		case 3:
			return "RIGHT";
			
		case 4:
			return "LEFT";
			

		default:
			break;
		}
		return "";
		*/
		
	}