complete explanation