#include <bits/stdc++.h>
#define fastread() ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL)
#define nl "\n"
#define ll long long
#define all(x) x.begin(), x.end()
#define Unique(x) x.resize(distance(x.begin(),unique(all(x))));
#define ff first
#define ss second
using namespace std;
#define int long long
const int N=2e5+7,M=1e9+7;
struct vertex{
int pre,flag,child[26];
vertex(){
pre=flag=0;
for (int i=0;i<26;i++) child[i]=-1;
}
};
vector<vertex>Trie;
int avail;
void insert(string &s){
int cur=0;
Trie[cur].pre++;
for (int i=0;i<s.size();i++){
int x=s[i]-'a';
if (Trie[cur].child[x]==-1){
Trie[cur].child[x]=avail;
if (Trie.size()<=avail) Trie.push_back(vertex());
else Trie[avail]=vertex();
avail++;
}
cur=Trie[cur].child[x];
Trie[cur].pre++;
}
Trie[cur].flag++;
}
int query(string &s){
int cur=0;
for (int i=0;i<s.size();i++){
int x=s[i]-'a';
if (Trie[cur].child[x]==-1) return 0;
cur=Trie[cur].child[x];
}
return Trie[cur].pre;
}
bool remove(int cur,string &s,int i){
if (i!=s.size()){
int x=s[i]-'a';
bool deleted=remove(Trie[cur].child[x],s,i+1);
if (deleted) Trie[cur].child[x]=-1;
}
else Trie[cur].flag--;
if (cur){
Trie[cur].pre--;
if (Trie[cur].pre==0){
Trie[cur]=vertex();
return 1;
}
}
return 0;
}
void solve(int tc){
avail=1;
if (Trie.size()) Trie[0]=vertex();
else Trie.push_back(vertex());
// remove er time e
// remove(0,s,0);
}
signed main(){
fastread();
int T=1;//cin>>T;
for (int i=1;i<=T;i++) solve(i);
}