private ArrayList<Integer> twoOpt(ArrayList<Integer> p){
		ArrayList<Integer> newRoute = p;
		boolean changed=true;
		while(changed){
//			System.out.println("hej");
			changed=false;
			if(System.nanoTime()-startTime>LIMIT){
				return newRoute;
			}
			for(int i=0; i<N-2;i++){
				for(int k=i+2;k<N-1;k++){
					
					int old=(distanceMatrix[newRoute.get(i)][newRoute.get(i+1)]+distanceMatrix[newRoute.get(k)][newRoute.get(k+1)]);
					int neuw=(distanceMatrix[newRoute.get(i)][newRoute.get(k)]+distanceMatrix[newRoute.get(i+1)][newRoute.get(k+1)]);
//					System.out.println("old: "+old+" new: "+neuw+" i: "+i+" k: "+k);
					if(old>neuw){
//						System.out.println("oldRoute: "+newRoute);
						newRoute = twoOptSwap(newRoute,i+1,k);
						changed=true;
//						System.out.println("changed to value: "+tourDistance(newRoute)+" "+"new route: "+newRoute);
						//continue w;
					}



				}
			}
		}

		return newRoute;
	}