again, returning `Left(List(leftp, rightp))` would be really clean here and easier to see the cost is always 0 in such cases.