Detailed explanations added.