Надеюсь тут достаточно подробное решение приведено. Буду рад любой критике.