private boolean solute(char[][] board, int left)
	{
		if (left == 0) return true;
		Set<Integer> cset = null;
		int min = 10;
		int x =0;
		int y =0;
		for (int i = 0; i< 9;i++)
		{
			for (int j = 0; j<9; j++)
			{
				if (board[i][j] == '.')
				{
					Set<Integer> tmp = findSuitSet(i, j);
					if (tmp.size() == 0) return false;
					if (tmp.size() < min)
					{
						min = tmp.size();
						cset = tmp;
						x = i;
						y = j;
					}
				}
			}
		}
		if (min > 4) return true;
		for (int value : cset)
		{
			
			add(x, y, value,board);
			if (solute(board,left-1)) return true;
			remove(x, y, value,board);
		}
		return false;
		
	}