#316. 姬哥与Jiva!

传统 1000 ms 256 MiB
标准 IO
文本比较 vvvb 标签

题目描述

聪明绝顶的姬哥在这一天发明了新的语言,使世界上最好(雾)的语言 Java 脱胎换骨成为了 Jiva!我们知道类(class)在面向对象设计模式中是十分重要的,而 Jiva 很好地继承了这一点。Jiva 允许程序员声明若干类对象并合理进行继承关系。声明一个类对象的语法格式如下:

class CLASS_A
    memberA
    memberB
    ...

其中第一行使用 class 关键字声明一个名为 CLASS_A 的对象,然后往下若干行每行通过缩进声明一个属于 CLASS_A 的成员 memberX,其中缩进为 4个空格

如果仅仅是这样那未免太简单了,同时 Jiva 也支持类对象的继承。一个对象 B 继承自另一个对象 A 表明对象 B 拥有所有对象 A 的成员,同时若在对象 B 中声明了新的成员,则新成员也属于对象 B,但不会属于对象 A。若 B 的新成员与 A 中某个成员同名,则新成员将会覆盖旧成员,即对象 B 中不会存在两个同名的成员。声明一个继承对象的语法格式如下:

class CLASS_B extends CLASS_A
    memberB
    memberC
    ...

其中类声明与成员声明语法不变,通过 extends 关键字表明对象 CLASS_B 继承自 CLASS_A,在上面的例子中,CLASS_B 中最终的成员有 memberA,memberB,memberC,而 CLASS_A 中最终的成员仅有 memberA,memberB

请注意,继承关系是可嵌套的,例如若再增加如下声明

class CLASS_C extends CLASS_B
    memberD

则最终 CLASS_C 中会包含成员 memberA,memberB,memberC,memberD,而并非只有成员 memberB,memberC,memberD

现在姬哥写了一段 Jiva 程序,程序中包含了若干类对象的声明,其中有些类对象之间存在着继承关系。请你帮助姬哥解析一下程序的继承关系,告诉姬哥最后每个类对象中包含了多少个成员。

输入格式

输入文件包含若干行,每行声明一个类对象或是一个成员。具体语法格式请参照题面。

为了简化数据,输入保证以下几点:

  1. 文件包含的类对象一共不超过 2020 个;
  2. 每个类对象中声明的成员(不包含继承得到的)数量也不超过 2020 个;
  3. 类对象名称均由大写英文字母构成,且长度不超过 55
  4. 成员名称均由小写字母构成,且长度不超过 22
  5. 每个对象继承的对象一定是之前已声明过的;
  6. 不存在同名对象,且同一个对象不包含同名成员;
  7. 输入文件中没有空行,类对象声明关键字 class 之前无空格,成员对象声明前有4个空格的缩进;

输出格式

请按照输入文件给定的类声明顺序输出每个类对象包含的成员个数,对于每个类输出格式如下:

CLASS_X : xxx 表示 CLASS_X 包含了 xxx 个成员。

样例

样例输入

class A
    fb
    fa
class B extends A
    fb
    fc
class C
    fc
    fb

样例输出

A : 2
B : 3
C : 2