#include<stream.h>
class A {
public:
virtual void f() {cout<< 'a';};
        void g() {f();};
virtual void h() {cout<<"ha";};
virtual void i() {cout<<"ia";};
};

class B:public A{
public:
void f() {cout<< 'b';};
void i() {cout<<"ib";};
};

class C: public B{
public:
void f(){cout<<'c';};
void h(){cout<<"hc";};
};

void test(A *ta) { ta->g();}

void testh(A &pa) {pa.h();};
void testi(A &pa) {pa.i();};

main(){
A a;
test(&a);
B b;
test(&b);
C c;
test(&c);
cout<<"\n";
testh(c);
testi(c);
}

