Опасайтесь багов в приведённом выше коде; я только проверил корректность, но не запускал его.
Комментарии закрыты.