def multiply_optimized(poly1, poly2):

if len(poly1) == 1 :

product = [poly1[0]* poly2[i] for i in range(len(poly2))]

return product

elif len(poly2) == 1 :

product = [poly2[0]* poly1[i] for i in range(len(poly1))]

return product

else:

n = max(len(poly1),len(poly2))

poly1, poly2 = split(poly1, poly2)

```
U = multiply_optimized(poly1[0],poly2[0])
V = multiply_optimized(poly1[0],poly2[1])
W = multiply_optimized(poly1[1],poly2[0])
Z = multiply_optimized(poly1[1],poly2[1])
product = add(U,add(increase_exponent(add(V,W),n//2), increase_exponent(Z,2*(n//2))))
return product
```