def SubarrayWithMaxSum(nums):

    # Initialize currMax and globalMax
    # with first value of nums
    currMax = nums[0]
    globalMax = nums[0]

    # Iterate for all the elements
    # of the array
    for i in range(1, len(nums)):
        
        # Update currMax
        currMax = max(nums[i], nums[i] + currMax)
        
        # Check if currMax is greater
        # than globalMax
        if (currMax > globalMax):
            globalMax = currMax
            endIndex = i

    startIndex = endIndex
    
    curGlobalMax = globalMax
    # Traverse in left direction to
    # find start Index of subarray
    while (startIndex >= 0):
        curGlobalMax -= nums[startIndex]
        
        if (curGlobalMax == 0):
            break
        
        # Decrement the start index
        startIndex -= 1
    
    return globalMax, startIndex, endIndex

def SubarrayWithMinSum(nums):

    # Initialize currMin and globalMin
    # with first value of nums
    currMin = nums[0]
    globalMin = nums[0]

    # Iterate for all the elements
    # of the array
    for i in range(1, len(nums)):
        
        # Update currMin
        currMin = min(nums[i], nums[i] + currMin)
        
        # Check if currMin is greater
        # than globalMin
        if (currMin < globalMin):
            globalMin = currMin
            endIndex = i

    startIndex = endIndex
    
    currGlobalMin = globalMin
    # Traverse in left direction to
    # find start Index of subarray
    while (startIndex >= 0):
        currGlobalMin -= nums[startIndex]
        
        if (currGlobalMin == 0):
            break
        
        # Decrement the start index
        startIndex -= 1
    
    return globalMin, startIndex, endIndex

# Given array arr[]
def printArray(nums, startIndex, endIndex):
    for i in range(startIndex, endIndex + 1):
        print(nums[i], end = " ")

nums = [-86, 43, -45, 68, -21]
maxSum, maxStart, maxEnd = SubarrayWithMaxSum(nums)
minSum, minStart, minEnd = SubarrayWithMinSum(nums)
if (maxSum > abs(minSum)):
    printArray(nums, maxStart, maxEnd)
else:
    printArray(nums, minStart, minEnd)
