#include <iostream> 
#include <typeinfo> 
#include <cxxabi.h> 
 
template  < typename ...>  struct  test { } ; 
 
template  < typename ...>  struct  join; 
 
template 
< 
	template  < typename ... HeadArgs >  class  Head,
	template  < typename ... TailArgs >  class ...
> 
struct  join< class  Head< typename  HeadArgs...> , class  Head< typename  TailArgs...> ...> 
{ 
    typedef  typename  Head< typename  HeadArgs..., typename  TailArgs......>  result; 
} ; 
 
int  main( ) 
{ 
	int  status; 
	std:: cout  <<  abi:: __cxa_demangle( typeid ( join< test< int , int , char > , test< double , double  char > , test< int >> :: result ) .name ( ) , 0 , 0 , & status)  <<  std:: endl ; 
 
	return  0 ; 
} 
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CiNpbmNsdWRlIDxjeHhhYmkuaD4KCnRlbXBsYXRlIDx0eXBlbmFtZS4uLj4gc3RydWN0IHRlc3Qge307Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+IHN0cnVjdCBqb2luOwoKdGVtcGxhdGUKPAoJdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEhlYWRBcmdzPiBjbGFzcyBIZWFkLAoJdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRhaWxBcmdzPiBjbGFzcy4uLgo+CnN0cnVjdCBqb2luPGNsYXNzIEhlYWQ8dHlwZW5hbWUgSGVhZEFyZ3MuLi4+LCBjbGFzcyBIZWFkPHR5cGVuYW1lIFRhaWxBcmdzLi4uPi4uLj4KewogICAgdHlwZWRlZiB0eXBlbmFtZSBIZWFkPHR5cGVuYW1lIEhlYWRBcmdzLi4uLCB0eXBlbmFtZSBUYWlsQXJncy4uLi4uLj4gcmVzdWx0Owp9OwoKaW50IG1haW4oKQp7CglpbnQgc3RhdHVzOwoJc3RkOjpjb3V0IDw8IGFiaTo6X19jeGFfZGVtYW5nbGUodHlwZWlkKGpvaW48dGVzdDxpbnQsIGludCwgY2hhcj4sIHRlc3Q8ZG91YmxlLCBkb3VibGUgY2hhcj4sIHRlc3Q8aW50Pj46OnJlc3VsdCkubmFtZSgpLCAwLCAwLCAmc3RhdHVzKSA8PCBzdGQ6OmVuZGw7CgoJcmV0dXJuIDA7Cn0=