черновой вариант.верна только общая логика.
info in comments