#include <iostream>
#include <iomanip>
using namespace std;
class Test
{
public:
Test operator + (Test&) { cout << "1\n"; return Test(); }
Test operator + (const Test&) { cout << "2\n"; return Test(); }
Test operator + (const Test&) const { cout << "3\n"; return Test(); }
};
const Test f() { return Test(); }
int main(int argc, const char * argv[])
{
Test a, b;
a + b;
a + f();
f() + f();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBUZXN0CnsKcHVibGljOgogICAgVGVzdCBvcGVyYXRvciArIChUZXN0JikgeyBjb3V0IDw8ICIxXG4iOyByZXR1cm4gVGVzdCgpOyB9CiAgICBUZXN0IG9wZXJhdG9yICsgKGNvbnN0IFRlc3QmKSB7IGNvdXQgPDwgIjJcbiI7IHJldHVybiBUZXN0KCk7IH0KICAgIFRlc3Qgb3BlcmF0b3IgKyAoY29uc3QgVGVzdCYpIGNvbnN0IHsgY291dCA8PCAiM1xuIjsgcmV0dXJuIFRlc3QoKTsgfQp9OwoKY29uc3QgVGVzdCBmKCkgeyByZXR1cm4gVGVzdCgpOyB9CgppbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqIGFyZ3ZbXSkKewogICAgVGVzdCBhLCBiOwoKICAgIGEgKyBiOwogICAgYSArIGYoKTsKICAgIGYoKSArIGYoKTsKCn0KCg==