private static ArrayList<int[][] > recur(int[][] in)
	{
		if (!check(in))
			return null;

		ArrayList<int[][]> result;
		result = new ArrayList<int[][]>();

		if (complete(in)) {
			result.add(in);
			return result;
		}

		for (int i = 0; i < 9; i++)
		{
			for (int j = 0; j < 9; j++)
			{		
				if (in[i][j] ==  0)
				{
					for (int val = 1; val < 10; val++)
					{

						int[][] copy = copy(in);
						copy[i][j] = val;
						if (check(copy)){
							ArrayList<int[][]> al = recur(copy);
							if (al!=null)
								result.addAll(al);
						}
					}
				}
			}
		}
		if (result.size()==0)
			return null;
		return result;
	}