complete solution