# A utility function to print an array def printArr(arr,n): for i in range(n): print(arr[i] , " ",end="") print() ''' Function to generates and prints all sorted arrays from alternate elements of 'A[i..m-1]' and 'B[j..n-1]' If 'flag' is true, then current element is to be included from A otherwise from B. 'len' is the index in output array C[]. We print output array each time before including a character from A only if length of output array is greater than 0. We try than all possible combinations ''' def generateUtil(A,B,C,i,j,m,n,len,flag): if (flag): # Include valid element from A # Print output if there is at # least one 'B' in output array 'C' if (len): printArr(C, len+1) # Recur for all elements of # A after current index for k in range(i,m): if ( not len): ''' this block works for the very first call to include the first element in the output array ''' C[len] = A[k] # don't increment lem # as B is included yet generateUtil(A, B, C, k+1, j, m, n, len, not flag) else: # include valid element from A and recur if (A[k] > C[len]): C[len+1] = A[k] generateUtil(A, B, C, k+1, j, m, n, len+1, not flag) else: # Include valid element from B and recur for l in range(j,n): if (B[l] > C[len]): C[len+1] = B[l] generateUtil(A, B, C, i, l+1, m, n, len+1, not flag) # Wrapper function def generate(A,B,m,n): C=[] #output array for i in range(m+n+1): C.append(0) generateUtil(A, B, C, 0, 0, m, n, 0, True) # Driver program A = [10, 15, 25] B = [5, 20, 30] n = len(A) m = len(B) generate(A, B, n, m) # This code is contributed # by Anant Agarwal.