#include <string.h>
#include<cstdio>
#include<stdio.h>
#include <iostream>
#include<string>
using namespace std;
int check(char s,string ch)
{
for (int k = ; k<ch.size(); k++)
if (!(s-ch[k]))
{
if (!(ch[k + ]- ':'))
return ;//有这个命令 且带参数
else
return ;//有这个命令 不带参数
}
return ;//没这个参数
}
struct node
{
bool vis;
string num;
int no;
char e;
};
int main()
{
char ch[]; cin >> ch;
int n,i,j,k,count; cin >> n;getchar();
string str, ans[];
node zm[]; bool flag;
for (i = ; i < n; i++)
{
count = ;
for (k = ; k < ; k++)
{
zm[k].e = k + ;
zm[k].vis = ;
zm[k].no = ;
zm[k].num.clear();
}
getline(cin, str);
for(j=;j<str.size();j++)
if (!(str[j] -'-'))
{
if (check(str[j + ], ch))
{
if (check(str[j + ], ch) == )//不带参数
{
if (!zm[str[j + ] - ].vis)//没有访问过
{
zm[str[j + ] - ].vis = ;
zm[str[j + ] - ].no = ++count;
} if (str[j + ] - '-')//后面如果跟了参数或者别的
break;
j = j + ;
}
else if (check(str[j + ], ch) == )//带参数
if (str[j + ]<'' || str[j + ]>'')
break;
else
{
if (!zm[str[j + ] - ].vis)
{
zm[str[j + ] - ].vis = ;
zm[str[j + ] - ].no = ++count;
}
k = j + ;
zm[str[j + ] - ].num.clear();
while (str[k] > ''&&str[k] < '')
{
zm[str[j + ] - ].num.push_back(str[k++]);
}
j = k-;
}
}
else
break;
}
node temp;
for(k=;k<;k++)
for (j = k + ; j < ; j++)
{
if (zm[j].no < zm[k].no)
{
temp = zm[j];
zm[j] = zm[k];
zm[k] = temp;
}
}
for (k = ; k < ; k++)
{
if (zm[k].vis)
{
//cout << '-' << zm[k].e<<' ';
ans[i].push_back('-');
ans[i].push_back(zm[k].e);
ans[i].push_back(' ');
}
if (!zm[k].num.empty())
{
//cout << zm[k].num << ' ';
ans[i]+= zm[k].num;
ans[i].push_back(' ');
}
}
//cout << endl;
}
for (i = ; i < n; i++)
{
cout << "Case " << i + << ':';
cout << ans[i].c_str() << endl;
}
return ;
}