private static Holder findSplitInversion(int[] left, int[] right) {
		int[] merged = new int[left.length+right.length];
		int leftHead =0; int rightHead = 0;
		int splitInversions = 0;

		for(int i=0; i<left.length+right.length; i++) {
			
			if(rightHead < right.length && leftHead<left.length &&  left[leftHead]<right[rightHead]) {
				merged[i] = left[leftHead];
				leftHead++;
			} else if(rightHead < right.length && leftHead<left.length && left[leftHead]>right[rightHead]){
				//this is the case where inversion happens .. an element from right subarray
				// is lesser than an element of left subArray
                merged[i] = right[rightHead];
				rightHead ++;
                // it means that the element on right subarray is smaller than rest of the elements on left subarray
                //hence increase the inversion count by that amount
                // *VeryImportant
				splitInversions+=left.length - leftHead;
			} else if(leftHead>=left.length) {
				merged[i] = right[rightHead];
				rightHead ++;
			} else if(rightHead >= right.length) {
				merged[i] = left[leftHead];
				leftHead++;
			} 
			
		}
		
		return new Holder(merged, splitInversions);
	}