#include <iostream>
template<class A, class B>
struct P;
template<class... Ts>
struct L {using type=L;};
template<class T, class... Ts>
using mul = L<P<T, Ts>...>;
template<class...>
struct cat;
template<class...Ts>
using cat_t=typename cat<Ts...>::type;
template<class... Ts>
struct cat<L<Ts...>>:
L<Ts...>
{};
template<class... As, class... Bs>
struct cat<L<As...>, L<Bs...>>:
L<As...,Bs...>
{};
template<class A, class B, class... Ts>
struct cat<A, B, Ts...>:
cat< cat_t<A,B>, Ts... >
{};
template<class A, class B>
struct join;
template<class... As, class... Bs>
struct join<L<As...>, L<Bs...>>:
cat<mul<As, Bs...>...>
{};
template<class A, class B>
using join_t=typename join<A,B>::type;
int main() {
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQj4Kc3RydWN0IFA7Cgp0ZW1wbGF0ZTxjbGFzcy4uLiBUcz4Kc3RydWN0IEwge3VzaW5nIHR5cGU9TDt9OwoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MuLi4gVHM+CnVzaW5nIG11bCA9IEw8UDxULCBUcz4uLi4+OwoKdGVtcGxhdGU8Y2xhc3MuLi4+CnN0cnVjdCBjYXQ7CnRlbXBsYXRlPGNsYXNzLi4uVHM+CnVzaW5nIGNhdF90PXR5cGVuYW1lIGNhdDxUcy4uLj46OnR5cGU7Cgp0ZW1wbGF0ZTxjbGFzcy4uLiBUcz4Kc3RydWN0IGNhdDxMPFRzLi4uPj46CglMPFRzLi4uPiAKe307Cgp0ZW1wbGF0ZTxjbGFzcy4uLiBBcywgY2xhc3MuLi4gQnM+CnN0cnVjdCBjYXQ8TDxBcy4uLj4sIEw8QnMuLi4+PjoKCUw8QXMuLi4sQnMuLi4+Cnt9OwoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MuLi4gVHM+CnN0cnVjdCBjYXQ8QSwgQiwgVHMuLi4+OgoJY2F0PCBjYXRfdDxBLEI+LCBUcy4uLiA+Cnt9OwoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQj4Kc3RydWN0IGpvaW47Cgp0ZW1wbGF0ZTxjbGFzcy4uLiBBcywgY2xhc3MuLi4gQnM+CnN0cnVjdCBqb2luPEw8QXMuLi4+LCBMPEJzLi4uPj46CgljYXQ8bXVsPEFzLCBCcy4uLj4uLi4+Cnt9Owp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCPgp1c2luZyBqb2luX3Q9dHlwZW5hbWUgam9pbjxBLEI+Ojp0eXBlOwoKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglyZXR1cm4gMDsKfQ==