public void nqueen(List<String> l,int startI,int startJ,int cnt,List<List<String>> solutions){
		int n = l.size();
		if(n==cnt){
			if(!solutions.contains(l)) {
				solutions.add(l);
			}
			return;
		}
//		int lastI = -1,lastJ = -1;
		for(int i=startI;i<n;i++){
			for(int j=startJ;j<n;j++) {
				int res = canSetQ( l, i, j);
				if(res>0) {
					List<String> copy = getCopy(l);
					setNQ(copy, i, j);
//					lastI = i;
//					lastJ = j;
					nqueen(copy, 0, 0, cnt+1,solutions);
				} else if(res == -1){
					j=n;//jump one row
				}
//				else if(res == -3 || res == -4){
					/*
					if(lastI>=0&& lastJ>=0){
						List<String> copy = getCopy(l);
						unSetNQ(copy, lastI, lastJ);
//						nqueen(copy, lastI, lastJ, cnt-1 );
					}
//					setNQ(l,lastI,lastJ);
					*/
//				}
			}
		}

	}