#include <iostream>
#include <stack>
#include <string>
using namespace std;
class TextEditor {
private:
stack<string> undoStack;
stack<string> redoStack;
string text;
public:
void write(const string& newText) {
undoStack.push(text); // Save current state before modification
text = newText;
while (!redoStack.empty()) redoStack.pop(); // Clear redo stack
}
void undo() {
if (!undoStack.empty()) {
redoStack.push(text); // Save current state for redo
text = undoStack.top(); // Restore previous state
undoStack.pop();
} else {
cout << "Nothing to undo!\n";
}
}
void redo() {
if (!redoStack.empty()) {
undoStack.push(text); // Save current state for undo
text = redoStack.top(); // Restore undone state
redoStack.pop();
} else {
cout << "Nothing to redo!\n";
}
}
void display() {
cout << "Current Text: " << text << endl;
}
};
int main() {
TextEditor editor;
editor.write("Hello");
editor.display();
editor.write("Hello World");
editor.display();
editor.undo();
editor.display();
editor.redo();
editor.display();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RhY2s+CiNpbmNsdWRlIDxzdHJpbmc+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgVGV4dEVkaXRvciB7CnByaXZhdGU6CiAgICBzdGFjazxzdHJpbmc+IHVuZG9TdGFjazsKICAgIHN0YWNrPHN0cmluZz4gcmVkb1N0YWNrOwogICAgc3RyaW5nIHRleHQ7CgpwdWJsaWM6CiAgICB2b2lkIHdyaXRlKGNvbnN0IHN0cmluZyYgbmV3VGV4dCkgewogICAgICAgIHVuZG9TdGFjay5wdXNoKHRleHQpOyAgLy8gU2F2ZSBjdXJyZW50IHN0YXRlIGJlZm9yZSBtb2RpZmljYXRpb24KICAgICAgICB0ZXh0ID0gbmV3VGV4dDsKICAgICAgICB3aGlsZSAoIXJlZG9TdGFjay5lbXB0eSgpKSByZWRvU3RhY2sucG9wKCk7ICAvLyBDbGVhciByZWRvIHN0YWNrCiAgICB9CgogICAgdm9pZCB1bmRvKCkgewogICAgICAgIGlmICghdW5kb1N0YWNrLmVtcHR5KCkpIHsKICAgICAgICAgICAgcmVkb1N0YWNrLnB1c2godGV4dCk7ICAvLyBTYXZlIGN1cnJlbnQgc3RhdGUgZm9yIHJlZG8KICAgICAgICAgICAgdGV4dCA9IHVuZG9TdGFjay50b3AoKTsgIC8vIFJlc3RvcmUgcHJldmlvdXMgc3RhdGUKICAgICAgICAgICAgdW5kb1N0YWNrLnBvcCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvdXQgPDwgIk5vdGhpbmcgdG8gdW5kbyFcbiI7CiAgICAgICAgfQogICAgfQoKICAgIHZvaWQgcmVkbygpIHsKICAgICAgICBpZiAoIXJlZG9TdGFjay5lbXB0eSgpKSB7CiAgICAgICAgICAgIHVuZG9TdGFjay5wdXNoKHRleHQpOyAgLy8gU2F2ZSBjdXJyZW50IHN0YXRlIGZvciB1bmRvCiAgICAgICAgICAgIHRleHQgPSByZWRvU3RhY2sudG9wKCk7ICAvLyBSZXN0b3JlIHVuZG9uZSBzdGF0ZQogICAgICAgICAgICByZWRvU3RhY2sucG9wKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY291dCA8PCAiTm90aGluZyB0byByZWRvIVxuIjsKICAgICAgICB9CiAgICB9CgogICAgdm9pZCBkaXNwbGF5KCkgewogICAgICAgIGNvdXQgPDwgIkN1cnJlbnQgVGV4dDogIiA8PCB0ZXh0IDw8IGVuZGw7CiAgICB9Cn07CgppbnQgbWFpbigpIHsKICAgIFRleHRFZGl0b3IgZWRpdG9yOwogICAgZWRpdG9yLndyaXRlKCJIZWxsbyIpOwogICAgZWRpdG9yLmRpc3BsYXkoKTsKICAgIAogICAgZWRpdG9yLndyaXRlKCJIZWxsbyBXb3JsZCIpOwogICAgZWRpdG9yLmRpc3BsYXkoKTsKICAgIAogICAgZWRpdG9yLnVuZG8oKTsKICAgIGVkaXRvci5kaXNwbGF5KCk7CiAgICAKICAgIGVkaXRvci5yZWRvKCk7CiAgICBlZGl0b3IuZGlzcGxheSgpOwogICAgCiAgICByZXR1cm4gMDsKfQo=