#include <iostream>
using namespace std;
class A;
class Base {
public:
Base(A* a, int k);
void call();
void call2();
private:
A* a;
int k;
};
class A : public Base {
friend class Base;
public:
A() : Base(this, 5) {}
Base lol(int k) { return Base(this, k); }
private:
void call(int k) { cout << "call(" << k << ");\n"; }
void call2(int k) { cout << "call2(" << k*2 << ");\n"; }
};
Base::Base(A* a, int k) : a(a), k(k) {}
void Base::call() {
a->call(k);
}
void Base::call2() {
a->call2(k);
}
int main() {
A a;
Base x = a.lol(3);
a.Base::call();
x.Base::call2();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIEE7CgpjbGFzcyBCYXNlIHsKIHB1YmxpYzoKICBCYXNlKEEqIGEsIGludCBrKTsKICB2b2lkIGNhbGwoKTsKICB2b2lkIGNhbGwyKCk7CgogcHJpdmF0ZToKICBBKiBhOwogIGludCBrOwp9OwoKY2xhc3MgQSA6IHB1YmxpYyBCYXNlIHsKICBmcmllbmQgY2xhc3MgQmFzZTsKIHB1YmxpYzoKICBBKCkgOiBCYXNlKHRoaXMsIDUpIHt9CiAgCiAgQmFzZSBsb2woaW50IGspIHsgcmV0dXJuIEJhc2UodGhpcywgayk7IH0KIHByaXZhdGU6CiAgdm9pZCBjYWxsKGludCBrKSB7IGNvdXQgPDwgImNhbGwoIiA8PCBrIDw8ICIpO1xuIjsgfQogIHZvaWQgY2FsbDIoaW50IGspIHsgY291dCA8PCAiY2FsbDIoIiA8PCBrKjIgPDwgIik7XG4iOyB9Cn07CgpCYXNlOjpCYXNlKEEqIGEsIGludCBrKSA6IGEoYSksIGsoaykge30Kdm9pZCBCYXNlOjpjYWxsKCkgewogICAgYS0+Y2FsbChrKTsKfQp2b2lkIEJhc2U6OmNhbGwyKCkgewogICAgYS0+Y2FsbDIoayk7Cn0KCmludCBtYWluKCkgewogICAgQSBhOwogICAgQmFzZSB4ID0gYS5sb2woMyk7CiAgICBhLkJhc2U6OmNhbGwoKTsKICAgIHguQmFzZTo6Y2FsbDIoKTsKICAgIHJldHVybiAwOwp9