class Z {
  public static void main(String arg[]) {
    A a1 = new A(10);
    a1.m();
    a1 = new B(20,21);
    a1.m();
    a1 = new C(30,31,32);
    a1.m();
    
    switch (arg[0].charAt(0)) {
      case 'A': a1 = new A(100);  break;
      case 'B': a1 = new B(200,201);  break;
      case 'C': a1 = new C(300,301,302);  break;
    }
    a1.m();
    System.out.println("p = " + a1.p);
  }
}
class A {
  int p;
  void m() { System.out.println("A" + p); }
  A(int i) { p = i;}
  A() {}
}
class B extends A {
  int p;
  void m() { System.out.println("B" + this.p); }
  B(int i, int j) { super.p = i; p = j; } 
  B() {}
}
class C extends B {
  int p;
  void m() { System.out.println("C" + p); }
  C(int i, int j, int k) { 
    //super();
    //super.super.p = i;  WRONG
    ((A)this).p = i;
    super.p = j; 
    this.p = k;
  }
}
