public void solve(HashMap<Integer, ArrayList<Integer>> X, HashMap<Integer, ArrayList<Integer>> Y, ArrayList<Integer> solution){
		if (X.isEmpty()) {
			if (!soluList.contains(solution)) {
				ArrayList<Integer> tmp = new ArrayList<Integer>();
				for (int i = 0; i < solution.size(); i++)
					tmp.add(solution.get(i));
				this.soluList.add(tmp);
				
				System.out.print("Solution ");
				System.out.print(soluList.indexOf(tmp));
				System.out.print(": ");
				for (int i : solution) {
					System.out.print(i);
					System.out.print(' ');
				}
				
				long end = System.currentTimeMillis();
				System.out.print("  Time: ");
				System.out.print(end-tmpStart);
				tmpStart = end;
				System.out.println("\n");
			}
			
		} else {
			int c = minInX(X);
//			if( c == 0 ) return;
			ArrayList<Integer> list = X.get(c);
			HashMap<Integer, ArrayList<Integer>> cols;
			for (int i = 0; i < list.size(); i++) {
				int r = list.get(i);
				solution.add(r);
				cols = select(X, Y, r);
				solve(X, Y, solution);
				deselect(X, Y, r, cols);
				solution.remove(solution.size() - 1);
			}
		}
		int index = 1;
	}