solved, revisit for understanding