Some comments added for understanding