public boolean kopt3(Kswap2 kswap, int[] rightCuts, int i, int length,int k,int index, boolean first){
		if(k==0){
//			System.out.println("doing k swap on: "+Arrays.toString(rightCuts));
			return kswap.startFindBestSolution(rightCuts);
		}
		if(index<=1&&System.currentTimeMillis()>=this.timeLimit){ return false; }//Time limit
		int limit=length;
//		if(index>0){
//		int oldcut =rightCuts[index-1];
//		oldcut=oldcut;
//		int oldcutvert=tour.getVertice(oldcut);
//		int kNear=Math.min(20, length);
//		}
//		
		boolean improved=false;
		for(int iters=0; iters<limit; iters++){
//			int toVertice=se.getXNeighbor(oldcutvert, iters);
			
			rightCuts[index]=i;
			if(checkOptimization(rightCuts,index)){
				if(first){
					improved = kopt3(kswap,rightCuts, Help.mod2(i+2, tour.length()), length-3,k-1, index+1, false) 
							|| improved;
				} else {
					improved = kopt3(kswap,rightCuts, Help.mod2(i+2, tour.length()), length-iters-2,k-1, index+1, false) 
							|| improved;
				}
			}
			
			
			i=Help.circleIncrement(i, tour.length());
		}
		return improved;
	}