#include<iostream>
#include<map>
#include<string>
#include<cstring>
#include<cstdio>
#include<vector>
#include<algorithm>
#include<string>
#include<set>
#include<queue>
using namespace std;
vector< string> v2[ 101 ] ;
struct store
{
string name;
long long value;
store( string name, long long value)
{
this- > name = name;
this- > value = value;
}
bool operator < ( const store & p) const
{
if ( p.value < value)
return p.value < value;
else
return false ;
}
} ;
int main( )
{
map< string, long long > v;
map< string, long long > v1;
map< long long , string> v3;
map< string, long long > v4;
map< string, long long > v5;
vector< store> out;
set< string> s;
char name[ 1000 ] ;
string z, x;
long long time = 0 , i, j, check;
while ( gets ( name) )
{
if ( name[ 0 ] == '0' && strlen ( name) == 1 )
break ;
if ( name[ 0 ] == '1' && strlen ( name) == 1 )
{
if ( v1[ name] == 0 && strlen ( name) == 1 )
{
v1[ name] = ++ time ;
v3[ time ] = name;
}
v5.clear ( ) ;
long long co = 0 ;
for ( i = 1 ; i <= time - 1 ; i++ )
{
co = 0 ;
for ( j = 0 ; j < v2[ i] .size ( ) ; j++ )
{
if ( v[ v2[ i] [ j] ] == 1 && v5[ v2[ i] [ j] ] == 0 )
{
co = co + 1 ;
v5[ v2[ i] [ j] ] = 1 ;
}
}
v4[ v3[ i] ] = co;
}
map< string, long long > :: iterator it;
for ( it = v4.begin ( ) ; it ! = v4.end ( ) ; it++ )
{
out.push_back ( store( it- > first, it- > second) ) ;
}
sort( out.begin ( ) , out.end ( ) ) ;
for ( i = 0 ; i < out.size ( ) ; i++ )
{
cout << out[ i] .name << " " << out[ i] .value << "\n " ;
}
time = 0 ;
for ( i = 0 ; i <= time + 1 ; i++ )
v2[ i] .clear ( ) ;
v.clear ( ) ;
v1.clear ( ) ;
v3.clear ( ) ;
v4.clear ( ) ;
v5.clear ( ) ;
out.clear ( ) ;
s.clear ( ) ;
time = 0 ;
co = 0 ;
}
else {
z = name;
transform( z.begin ( ) , z.end ( ) , z.begin ( ) , :: toupper ) ;
if ( z == name)
{
x = name;
if ( v1[ name] == 0 )
{
v1[ name] = ++ time ;
v3[ time ] = name;
}
v5.clear ( ) ;
}
else {
if ( v5[ name] == 0 )
{
v[ name] = v[ name] + 1 ;
v5[ name] = 1 ;
}
long long lol = v1[ x] ;
v2[ lol] .push_back ( name) ;
}
}
}
}
CiNpbmNsdWRlPGlvc3RyZWFtPgojaW5jbHVkZTxtYXA+CiNpbmNsdWRlPHN0cmluZz4KI2luY2x1ZGU8Y3N0cmluZz4KI2luY2x1ZGU8Y3N0ZGlvPgojaW5jbHVkZTx2ZWN0b3I+CiNpbmNsdWRlPGFsZ29yaXRobT4KI2luY2x1ZGU8c3RyaW5nPgojaW5jbHVkZTxzZXQ+CiNpbmNsdWRlPHF1ZXVlPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp2ZWN0b3I8c3RyaW5nPnYyWzEwMV07CnN0cnVjdCBzdG9yZQp7CglzdHJpbmcgbmFtZTsKCWxvbmcgbG9uZyB2YWx1ZTsKCXN0b3JlKHN0cmluZyBuYW1lLCBsb25nIGxvbmcgdmFsdWUpCgl7CgkJdGhpcy0+bmFtZSA9IG5hbWU7CgkJdGhpcy0+dmFsdWUgPSB2YWx1ZTsKCgl9Cglib29sIG9wZXJhdG9yIDwgKGNvbnN0IHN0b3JlICZwKSBjb25zdAoJewoJCWlmIChwLnZhbHVlIDwgdmFsdWUpCgkJCXJldHVybiBwLnZhbHVlPHZhbHVlOwoJCWVsc2UKCQkJcmV0dXJuIGZhbHNlOwoJfQoKfTsKaW50IG1haW4oKQp7CgltYXA8c3RyaW5nLCBsb25nIGxvbmc+djsKCW1hcDxzdHJpbmcsIGxvbmcgbG9uZz52MTsKCW1hcDxsb25nIGxvbmcsIHN0cmluZz52MzsKCW1hcDxzdHJpbmcsIGxvbmcgbG9uZz52NDsKCW1hcDxzdHJpbmcsIGxvbmcgbG9uZz52NTsKCXZlY3RvcjxzdG9yZT4gb3V0OwoJc2V0PHN0cmluZz5zOwoJY2hhciBuYW1lWzEwMDBdOwoJc3RyaW5nIHosIHg7Cglsb25nIGxvbmcgdGltZSA9IDAsIGksIGosIGNoZWNrOwoJd2hpbGUgKGdldHMobmFtZSkpCgl7CgkJaWYgKG5hbWVbMF0gPT0gJzAnICYmc3RybGVuKG5hbWUpID09IDEpCgkJCWJyZWFrOwoJCWlmIChuYW1lWzBdID09ICcxJyYmc3RybGVuKG5hbWUpPT0xKQoJCXsKCQkgCgkJCWlmICh2MVtuYW1lXSA9PSAwICYmIHN0cmxlbihuYW1lKSA9PSAxKQoJCQl7CgkJCQl2MVtuYW1lXSA9ICsrdGltZTsKCQkJCXYzW3RpbWVdID0gbmFtZTsKCgoJCQl9CgkJCXY1LmNsZWFyKCk7CgkJCWxvbmcgbG9uZyBjbyA9IDA7CgkJCWZvciAoaSA9IDE7IGkgPD0gdGltZSAtIDE7IGkrKykKCQkJewoJCQkJY28gPSAwOwoJCQkJZm9yIChqID0gMDsgaiA8IHYyW2ldLnNpemUoKTsgaisrKQoJCQkJewoJCQkJCWlmICh2W3YyW2ldW2pdXSA9PSAxICYmIHY1W3YyW2ldW2pdXSA9PSAwKQoJCQkJCXsKCgkJCQkJCWNvID0gY28gKyAxOwoJCQkJCQl2NVt2MltpXVtqXV0gPSAxOwoJCQkJCX0KCgkJCQl9CgkJCQl2NFt2M1tpXV0gPSBjbzsKCgkJCX0KCgkJCW1hcDxzdHJpbmcsIGxvbmcgbG9uZz46Oml0ZXJhdG9yIGl0OwoJCQlmb3IgKGl0ID0gdjQuYmVnaW4oKTsgaXQgIT0gdjQuZW5kKCk7IGl0KyspCgkJCXsKCQkJCW91dC5wdXNoX2JhY2soc3RvcmUoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKSk7CgoJCQl9CgkJCXNvcnQob3V0LmJlZ2luKCksIG91dC5lbmQoKSk7CgkJCWZvciAoaSA9IDA7IGkgPCBvdXQuc2l6ZSgpOyBpKyspCgkJCXsKCQkJCWNvdXQgPDwgb3V0W2ldLm5hbWUgPDwgIiAiIDw8IG91dFtpXS52YWx1ZSA8PCAiXG4iOwoKCQkJfQoJCgkJCXRpbWUgPSAwOwoJCQlmb3IgKGkgPSAwOyBpIDw9IHRpbWUrMTsgaSsrKQoJCQkJdjJbaV0uY2xlYXIoKTsKCQkJdi5jbGVhcigpOwoJCQl2MS5jbGVhcigpOwoJCQl2My5jbGVhcigpOwoJCQl2NC5jbGVhcigpOwoJCQl2NS5jbGVhcigpOwoJCQlvdXQuY2xlYXIoKTsKCQkJcy5jbGVhcigpOwoJCQl0aW1lID0gMDsKCQkJY28gPSAwOwoJCX0KCQllbHNlewoJCQl6ID0gbmFtZTsKCQkJdHJhbnNmb3JtKHouYmVnaW4oKSwgei5lbmQoKSwgei5iZWdpbigpLCA6OnRvdXBwZXIpOwoJCQlpZiAoeiA9PSBuYW1lKQoJCQl7CgkJCQl4ID0gbmFtZTsKCQkJCWlmICh2MVtuYW1lXSA9PSAwKQoJCQkJewoJCQkJCXYxW25hbWVdID0gKyt0aW1lOwoJCQkJCXYzW3RpbWVdID0gbmFtZTsKCgkJCQl9CgkJCQl2NS5jbGVhcigpOwoKCgkJCX0KCQkJZWxzZXsKCQkJCWlmICh2NVtuYW1lXSA9PSAwKQoJCQkJewoKCQkJCQl2W25hbWVdID0gdltuYW1lXSArIDE7CgkJCQkJdjVbbmFtZV0gPSAxOwoJCQkJfQoJCQkJbG9uZyBsb25nIGxvbCA9IHYxW3hdOwoJCQkJdjJbbG9sXS5wdXNoX2JhY2sobmFtZSk7CgoJCQl9CgoKCgkJfQoKCX0KCn0=
stdin
IFJPQk9UUwptZQphbmQKbm9vbmUKTElOVVgKaXN0aGViZXN0CmlzdGhlYmVzdApub29uZQpFTEVDVFJPTklYIFBST0pFQ1QKaGF0ZWl0CmJ1cm5lZApoYXRlaXQKaGF0ZWl0Cm5vb25lCkMgUFJPSkVDVAppc2Nvb2wKaWFtaGVyZQpoZWxsd29ybGQKbGludXgKZ3VpCmlzY29vbAptZQpUSElTIElTIFRIRSBMQVNUCmhlbGxvd29ybGQKdGhpc2lzbWUKaG9wZXlvdWdldGFjY2VwdGVkCjEKQUIKQUEKMQpBQQp4CmMKQkEKeApDCjEKQUEKQkEKQwoxClJPQk9UUwptZQphbmQKbm9vbmUKTElOVVgKaXN0aGViZXN0Cm5vb25lCm5vb25lCmlhbWhlcmUKRUxFQ1RST05JWCBQUk9KRUNUCmlzdGhlYmVzdApoYXRlaXQKYnVybmVkCmhhdGVpdApoYXRlaXQKbm9vbmUKQyBQUk9KRUNUICMyCmlzY29vbAppYW1oZXJlCmhlbGx3b3JsZApsaW51eApndWkKaXNjb29sCm1lClRISVMgSVMgVEhFIExBU1QKaGVsbG93b3JsZAp0aGlzaXNtZQpob3BleW91Z2V0YWNjZXB0ZWQKZ3VpCjEKQQp4CngKeApCCngKeAp4CkMKeAp4CngKMQowCg==
ROBOTS
me
and
noone
LINUX
isthebest
isthebest
noone
ELECTRONIX PROJECT
hateit
burned
hateit
hateit
noone
C PROJECT
iscool
iamhere
hellworld
linux
gui
iscool
me
THIS IS THE LAST
helloworld
thisisme
hopeyougetaccepted
1
AB
AA
1
AA
x
c
BA
x
C
1
AA
BA
C
1
ROBOTS
me
and
noone
LINUX
isthebest
noone
noone
iamhere
ELECTRONIX PROJECT
isthebest
hateit
burned
hateit
hateit
noone
C PROJECT #2
iscool
iamhere
hellworld
linux
gui
iscool
me
THIS IS THE LAST
helloworld
thisisme
hopeyougetaccepted
gui
1
A
x
x
x
B
x
x
x
C
x
x
x
1
0