public boolean kopt(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);
		}
	
		int limit=length;
		boolean improved=false;
		for(int iters=0; iters<limit; iters++){
			rightCuts[index]=i;
			if(first){
				//length -3 because are really choosing 2 vertices and the second vertice makes 
				//it so that one extra place is forbidden
				//<-xOxn->
				improved = kopt(kswap,rightCuts, Help.mod2(i+2, tour.length()), length-3,k-1, index+1, false) 
						|| improved;
			} else {
				//<-xOx(iters)Oxn->
				improved = kopt(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;
	}