Есть несколько способов достижения этого, решение о том, как это сделать, зависит от разработчика.
Один из способов - использовать стек, где хранится состояние этой программы в такой структуре.
Другой способ - использовать шаблон проектирования, называемый шаблоном команд, который часто используется для реализации функции отмены повторного выполнения, он очень похож на стек, но вместо сохранения состояния программы вы сохраняете действие, выполненное с программой, вместе с аналогичным действием для отмены выполненного.