#include <iostream>
class A;
void l(A& f);
class A{
public:
virtual void S(){std::cout <<"S A\n";}
void Z(){std::cout <<"Z A\n";}
};
class B:public A{
public:
void S() {std::cout <<"S B\n";}
void Z(){std::cout <<"Z B\n";}
};
int main() {
B d;
l(d);
return 0;
}
void l(A& f){
f.S();
f.Z();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQTsKdm9pZCBsKEEmIGYpOwpjbGFzcyBBewpwdWJsaWM6CgogICAgdmlydHVhbCB2b2lkIFMoKXtzdGQ6OmNvdXQgPDwiUyBBXG4iO30KICAgIHZvaWQgWigpe3N0ZDo6Y291dCA8PCJaIEFcbiI7fQp9OwpjbGFzcyBCOnB1YmxpYyBBewpwdWJsaWM6CiAgICB2b2lkIFMoKSAge3N0ZDo6Y291dCA8PCJTIEJcbiI7fQogICAgdm9pZCBaKCl7c3RkOjpjb3V0IDw8IlogQlxuIjt9Cn07CmludCBtYWluKCkgewogICAgQiBkOwogICAgbChkKTsKCgogICAgcmV0dXJuIDA7Cn0KCnZvaWQgbChBJiBmKXsKICAgIGYuUygpOwogICAgZi5aKCk7Cgp9