#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define lc t[x].l
#define rc t[x].r
const int N=250005,MOD=985003;
int read(){
char c=getchar();int x=0,f=1;
while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1; c=getchar();}
while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘; c=getchar();}
return x*f;
}
int v,tm;
char s[15];
struct node{
int l,r,v,t,size,rnd;
char s[15];
}t[N];
int sz,root;
inline void update(int x){t[x].size=t[lc].size+t[rc].size+1;}
inline void rturn(int &x){
int c=lc;lc=t[c].r;t[c].r=x;
t[c].size=t[x].size;update(x);x=c;
}
inline void lturn(int &x){
int c=rc;rc=t[c].l;t[c].l=x;
t[c].size=t[x].size;update(x);x=c;
}
inline void ins(int &x,int v,int tm,char s[]){
if(x==0){
sz++;x=sz;
t[x].l=t[x].r=0;t[x].size=1;
t[x].v=v;t[x].rnd=rand();t[x].t=tm;
memcpy(t[x].s,s,strlen(s));
return;
}
t[x].size++;
if(v<=t[x].v){
ins(lc,v,tm,s);
if(t[lc].rnd<t[x].rnd) rturn(x);
}else{
ins(rc,v,tm,s);
if(t[rc].rnd<t[x].rnd) lturn(x);
}
}
inline void del(int &x,int v,int tm){
if(x==0) return;
if(t[x].v==v){
if(t[x].t==tm){
if(lc*rc==0) x=lc+rc;
else if(t[lc].rnd<t[rc].rnd) rturn(x),del(x,v,tm);
else lturn(x),del(x,v,tm);
}else{
t[x].size--;
if(tm>t[x].t) del(lc,v,tm);
else del(rc,v,tm);
}
}else{
t[x].size--;
if(v<t[x].v) del(lc,v,tm);
else del(rc,v,tm);
}
}
int rnk(int x,int v,int tm){
if(x==0) return 0;
if(t[x].v==v){
if(tm==t[x].t) return t[lc].size+1;
else if(tm>t[x].t) return rnk(lc,v,tm);
else return t[lc].size+1+rnk(rc,v,tm);
}
else if(v<t[x].v) return rnk(lc,v,tm);
else return t[lc].size+1+rnk(rc,v,tm);
}
int kth(int x,int k){
if(x==0) return 0;
if(k<=t[lc].size) return kth(lc,k);
else if(k>t[lc].size+1) return kth(rc,k-t[lc].size-1);
else return x;
}
struct data{
int v,tm,ne;
char s[15];
}mp[MOD+5];
int h[MOD+5],cnt;
int hsh(char s[]){
int x=0,len=strlen(s+1);
for(int i=1;i<=len;i++) x=(x*27+s[i]-‘A‘+1)%MOD;
return x;
}
inline bool equ(char s1[],char s2[]){
int l1=strlen(s1),l2=strlen(s2);
if(l1!=l2) return false;
for(int i=1;i<=l1;i++) if(s1[i]!=s2[i]) return false;
return true;
}
void Insert(char s[],int v,int tm){
int k=hsh(s);
for(int i=h[k];i;i=mp[i].ne){
if(equ(s,mp[i].s)){
del(root,mp[i].v,mp[i].tm);
mp[i].v=v;mp[i].tm=tm;
ins(root,v,tm,s);
return;
}
}
cnt++;
mp[cnt].v=v;mp[cnt].tm=tm;
memcpy(mp[cnt].s,s,strlen(s));
mp[cnt].ne=h[k];h[k]=cnt;
ins(root,v,tm,s);
}
void Rank(char s[]){
int k=hsh(s),i;
for(i=h[k];i;i=mp[i].ne)
if(equ(s,mp[i].s)) break;
printf("%d\n",cnt+1-rnk(root,mp[i].v,mp[i].tm));
}
void Kth(char s[]){
int k=0,len=strlen(s+1);
for(int i=1;i<=len;i++) k=k*10+s[i]-‘0‘;
//printf("Kth %d %s %d\n",k,s,len);
for(int i=k;i<=cnt&&i<=k+9;i++){
printf("%s",t[kth(root,cnt+1-i)].s+1);
if(i<cnt&&i<k+9) putchar(‘ ‘);
}
putchar(‘\n‘);
}
int main(){
int T=read();
for(int i=1;i<=T;i++){
scanf("%s",s);
if(s[0]==‘+‘){
v=read();
Insert(s,v,i);
}else{
if(s[1]>=‘0‘&&s[1]<=‘9‘) Kth(s);
else Rank(s);
}
}
}