#include <bits/stdc++.h>
#define foreach(it,v) for (__typeof((v).begin()) it=(v).begin();it!=(v).end();it++)
#define FOR(i,l,r) for(int i=(l);i<=(r);i++)
#define rep(i,n) for(int i=0;i<(n);i++)
#define vi vector<int>
#define pb push_back
#define mp make_pair
using namespace std;

bool istext(char s[])
{
	if (strcmp(s,"<text>")!=0) return 0;
	return 1;
}
bool notext(char s[])
{
	if (strcmp(s,"</text>")!=0) return 0;
	return 1;
}

int sspo;
map<string,int> ss;
int gs[20001];

vector<int> day[7];
char str[21];
int findid(char s0[])
{
	string s(s0);
	map<string,int>::iterator it=ss.find(s);
	if (it==ss.end())
	{
		ss.insert(mp(s,++sspo));
		return sspo;
	}
	else return it->second;
}
void del(vi &a)
{
	foreach (it,a) gs[*it]--;
	a.clear();
}
vector< pair<int,string> > jl;
void solve(int n)
{
	printf("<top %d>\n",n);
	jl.clear();
	foreach(it,ss) jl.pb(mp(-gs[it->second],it->first));
	sort(jl.begin(),jl.end());
	if (n>jl.size()) n=jl.size();
	for (int i=0;i<n;i++) printf("%s %d\n",jl[i].second.c_str(),-jl[i].first);
	for (int i=n;i<jl.size()&&jl[i].first==jl[n-1].first;i++)
		printf("%s %d\n",jl[i].second.c_str(),-jl[i].first);
	puts("</top>");
}
int main(){
	for (int d,id,turn=0;scanf("%s",str)!=EOF;)
	{
		if (istext(str))
		{
			turn=(turn+1)%7;
			del(day[turn]);
			while (1)
			{
				scanf("%s",str);
				if (notext(str)) break;
				if (strlen(str)<=3) continue;
				id=findid(str);
				gs[id]++; day[turn].pb(id);
			}
		}
		else
		{
			scanf("%d%s",&d,str);
			solve(d);
		}
	}
	return 0;
}

/*bool istop(char s[])
{
	if (strlen(s)!=4) return 0;
	if (strcmp(s,"<top")!=0) return 0;
	return 1;
}*/

//solve
	/*priority_queue< pair<int,string> > q;
	foreach (it,ss) q.push(mp(gs[it->second],string(ss0[it->second])));
	printf("<top %d>\n",n);
	int k=0,temp;
	while (k<n)
	{
		printf("%s %d\n",q.top().second.c_str(),temp=q.top().first);
		q.pop();
	}
	while (!q.empty()&&q.top().first==temp)
	{
		printf("%s %d\n",q.top().second.c_str(),q.top().first);
		q.pop();
	}*/
	/*while (k<n)
	{
		jl[++k]=q.top().second;
		q.pop();
	}
	while (!q.empty()&&q.top().first==gs[jl[n]])
	{
		jl[++k]=q.top().second;
		q.pop();
	}
	for (int i=1;i<=k;i++) printf("%s %d\n",ss0[jl[i]],gs[jl[i]]);*/
