#include <iostream>
using namespace std;
class A {
public:
A() {}
};
class B : A {
public:
B() {}
};
void f(A a, B b) {
cout << "A, B" << endl;
}
void f(A a, A b) {
cout << "A, A" << endl;
}
void f(B a, A b) {
cout << "B, A" << endl;
}
void f(B a, B b) {
cout << "B, B" << endl;
}
int main() {
A a;
B b;
f(a, b);
f(b, a);
f(a, a);
f(b, b);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQSB7CiAgICBwdWJsaWM6CiAgICAgICAgQSgpIHt9Cn07CgpjbGFzcyBCIDogQSB7CiAgICBwdWJsaWM6CiAgICAgICAgQigpIHt9Cn07Cgp2b2lkIGYoQSBhLCBCIGIpIHsKICAgIGNvdXQgPDwgIkEsIEIiIDw8IGVuZGw7Cn0KCnZvaWQgZihBIGEsIEEgYikgewogICAgY291dCA8PCAiQSwgQSIgPDwgZW5kbDsKfQoKdm9pZCBmKEIgYSwgQSBiKSB7CiAgICBjb3V0IDw8ICJCLCBBIiA8PCBlbmRsOwp9Cgp2b2lkIGYoQiBhLCBCIGIpIHsKICAgIGNvdXQgPDwgIkIsIEIiIDw8IGVuZGw7Cn0KCmludCBtYWluKCkgewogICAgQSBhOwogICAgQiBiOwogICAgZihhLCBiKTsKICAgIGYoYiwgYSk7CiAgICBmKGEsIGEpOwogICAgZihiLCBiKTsKICAgIHJldHVybiAwOwp9