def merge(a,b,m,e):
    l=a[b:m+1]
    r=a[m+1:e+1]
    k=b
    i=0
    j=0
    while i<len(l) and j<len(r):
        #change sign for Descending order
        if l[i]<r[j]: 
            a[k]=l[i]
            i+=1
        else:
            a[k]=r[j]
            j+=1
        k+=1
    while i<len(l):
        a[k]=l[i]
        i+=1
        k+=1
    while j<len(r):
        a[k]=r[j]
        j+=1
        k+=1
    return a
    
def mergesort(a,b,e):
    """
    >>> mergesort([3,2,1],0,2)
    [1, 2, 3]
    >>> mergesort([3,2,1,0,1,2,3,5,4],0,8)
    [0, 1, 1, 2, 2, 3, 3, 4, 5]
    """
    if b<e:
        m = (b+e)//2
        #print("ms1",a,b,m)
        mergesort(a,b,m)
        #print("ms2",a,m+1,e)
        mergesort(a,m+1,e)
        #print("m",a,b,m,e)
        merge(a,b,m,e)
        return a

if __name__ == "__main__":
    import doctest
    doctest.testmod()