Все выходные просидел думая логику программы, не смогу. Нашел готовое решение хотелось бы пояснения к нему и по подробней о mark() reset().