#include <vector>
#include <tuple>
using namespace std;
struct t_none{};
struct Z{struct t_impl{};};
struct Y:Z{};
struct X:Y{};
struct A:X
{
struct JustForFun{struct G{};struct H{};struct J{};};
struct B:JustForFun{
struct t_here{};
static vector<t_impl> foo();
static vector<t_here> bar();
static vector<t_none> baz();
};
};
struct JustForFun{struct t_here:X{};struct G{};struct H:t_here{};struct J{};};
struct Bobz:JustForFun{
struct GHJ:G,H,J{
static vector<t_impl> foo();
static vector<t_here> bar();
static vector<t_none> baz();
};
struct t_end{};
};
struct WTF:t_none{
struct t_impl{};
struct t_here{};
struct t_beg:Bobz{
static vector<int> foo();
static tuple<A,t_here,int,J,G,t_impl,Y,Bobz> bar();
};
struct t_end{};
};
//impl
vector<Z::t_impl> A::B::foo(){return vector<t_impl>();}
vector<A::B::t_here> A::B::bar(){return vector<t_here>();}
vector<t_none> A::B::baz(){return vector<t_none>();}
vector<Z::t_impl> Bobz::GHJ::foo(){return vector<t_impl>();}
vector<JustForFun::t_here> Bobz::GHJ::bar(){return vector<t_here>();}
vector<t_none> Bobz::GHJ::baz(){return vector<t_none>();}
vector<int> WTF::t_beg::foo(){return vector<int>();}
tuple<A,JustForFun::t_here,int,JustForFun::J,JustForFun::G,WTF::t_impl,Y,Bobz> WTF::t_beg::bar(){
return tuple<A,t_here,int,J,G,t_impl,Y,Bobz>();
}
int main(){return 0;}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHR1cGxlPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IHRfbm9uZXt9OwpzdHJ1Y3QgWntzdHJ1Y3QgdF9pbXBse307fTsKc3RydWN0IFk6Wnt9OwpzdHJ1Y3QgWDpZe307CnN0cnVjdCBBOlgKewogIHN0cnVjdCBKdXN0Rm9yRnVue3N0cnVjdCBHe307c3RydWN0IEh7fTtzdHJ1Y3QgSnt9O307CiAgc3RydWN0IEI6SnVzdEZvckZ1bnsKICAgIHN0cnVjdCB0X2hlcmV7fTsKICAgICAgc3RhdGljIHZlY3Rvcjx0X2ltcGw+IGZvbygpOwogICAgICBzdGF0aWMgdmVjdG9yPHRfaGVyZT4gYmFyKCk7CiAgICAgIHN0YXRpYyB2ZWN0b3I8dF9ub25lPiBiYXooKTsKICB9Owp9OwpzdHJ1Y3QgSnVzdEZvckZ1bntzdHJ1Y3QgdF9oZXJlOlh7fTtzdHJ1Y3QgR3t9O3N0cnVjdCBIOnRfaGVyZXt9O3N0cnVjdCBKe307fTsKc3RydWN0IEJvYno6SnVzdEZvckZ1bnsKICBzdHJ1Y3QgR0hKOkcsSCxKewogICAgc3RhdGljIHZlY3Rvcjx0X2ltcGw+IGZvbygpOwogICAgc3RhdGljIHZlY3Rvcjx0X2hlcmU+IGJhcigpOwogICAgc3RhdGljIHZlY3Rvcjx0X25vbmU+IGJheigpOwogIH07CiAgc3RydWN0IHRfZW5ke307Cn07CnN0cnVjdCBXVEY6dF9ub25lewogIHN0cnVjdCB0X2ltcGx7fTsKICBzdHJ1Y3QgdF9oZXJle307CiAgc3RydWN0IHRfYmVnOkJvYnp7CiAgICBzdGF0aWMgdmVjdG9yPGludD4gZm9vKCk7CiAgICBzdGF0aWMgdHVwbGU8QSx0X2hlcmUsaW50LEosRyx0X2ltcGwsWSxCb2J6PiBiYXIoKTsKICB9OwogIHN0cnVjdCB0X2VuZHt9Owp9OwovL2ltcGwKdmVjdG9yPFo6OnRfaW1wbD4gQTo6Qjo6Zm9vKCl7cmV0dXJuIHZlY3Rvcjx0X2ltcGw+KCk7fQp2ZWN0b3I8QTo6Qjo6dF9oZXJlPiBBOjpCOjpiYXIoKXtyZXR1cm4gdmVjdG9yPHRfaGVyZT4oKTt9CnZlY3Rvcjx0X25vbmU+IEE6OkI6OmJheigpe3JldHVybiB2ZWN0b3I8dF9ub25lPigpO30KdmVjdG9yPFo6OnRfaW1wbD4gQm9iejo6R0hKOjpmb28oKXtyZXR1cm4gdmVjdG9yPHRfaW1wbD4oKTt9CnZlY3RvcjxKdXN0Rm9yRnVuOjp0X2hlcmU+IEJvYno6OkdISjo6YmFyKCl7cmV0dXJuIHZlY3Rvcjx0X2hlcmU+KCk7fQp2ZWN0b3I8dF9ub25lPiBCb2J6OjpHSEo6OmJheigpe3JldHVybiB2ZWN0b3I8dF9ub25lPigpO30KdmVjdG9yPGludD4gV1RGOjp0X2JlZzo6Zm9vKCl7cmV0dXJuIHZlY3RvcjxpbnQ+KCk7fQp0dXBsZTxBLEp1c3RGb3JGdW46OnRfaGVyZSxpbnQsSnVzdEZvckZ1bjo6SixKdXN0Rm9yRnVuOjpHLFdURjo6dF9pbXBsLFksQm9iej4gV1RGOjp0X2JlZzo6YmFyKCl7CiAgcmV0dXJuIHR1cGxlPEEsdF9oZXJlLGludCxKLEcsdF9pbXBsLFksQm9iej4oKTsKfQoKaW50IG1haW4oKXtyZXR1cm4gMDt9