также увидел у других, что решают эту задачу через mark и reset, расскажите суть такой реализации, спасибо