complete soloution