#include<bits/stdc++.h>
using namespace std;
struct character{
    int depht;
    char letter;
    vector<int> Pointers;
};
std::vector<int> Top;
vector<struct character> Tree;
void Init(){
    return;
}
int getPointerAtDepht(int start,int depht){
    if(Tree[start].depht==depht){
        return start;
    }
    int fix=Tree[start].depht-depht;
    int i=-1;
    for(;fix>0;i++){
        fix/=2;
    }
    return getPointerAtDepht(Tree[start].Pointers[i],depht);
    
}
void TypeLetter(char L){
    if(Top.size()==0 || Top[Top.size()-1]==-1){
        Tree.push_back({0,L,vector<int>()});
    }
    else{
        
        int prevP=Top[Top.size()-1];
        int depht=Tree[prevP].depht+1;
        vector<int> Np;
        
        int pos=0;
        Np.push_back(prevP);
        while(Tree[prevP].Pointers.size()>pos){
            prevP=Tree[prevP].Pointers[pos];
            Np.push_back(prevP);
            pos+=1;
        }
        Tree.push_back({depht,L,Np});
        
        
    }
    Top.push_back(Tree.size()-1);
}
void UndoCommands(int U){
    if(U==Top.size()){
        Top.push_back(-1);
    }
    else{
        Top.push_back(Top[Top.size()-1-U]);
    }
}
char GetLetter(int P){
    int pt=getPointerAtDepht(Top[Top.size()-1],P);
    char tmp=Tree[pt].letter;
    return Tree[pt].letter;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |