def standardise(P, Q):
    n, m = len(P), len(Q)
    if n < m:
        P = P + [0] * (m - n)
    else:
        Q = Q + [0] * (n - m)
    return P, Q

def add(P, Q):
    P, Q = standardise(P, Q)
    return [ P[i] + Q[i] for i in range(len(P)) ]

def sous(P, Q):
    P, Q = standardise(P, Q)
    return [ P[i] - Q[i] for i in range(len(P)) ]

def prodmonome(P, k):
    return [0] * k + P

def prod(P, Q):
    n = max(len(P), len(Q))
    if n == 1:
        return [P[0]*Q[0]]
    P , Q = standardise(P, Q)
    k = n // 2
    P0 , P1 = P[0:k] , P[k:n]
    Q0 , Q1 = Q[0:k] , Q[k:n]
    R0 = prod(P0 , Q0)
    R1 = prod(P1 , Q1)
    R2 = prod( add(P0 , P1) , add(Q0 , Q1) )
    R2 = sous( sous(R2 , R1) , R0)
    R1 = prodmonome(R1 , 2 * k)
    R2 = prodmonome(R2 , k)
    return add( add(R0 , R1) , R2)