#include <iostream>
#include <vector>
using namespace std;
template<class T>
void func(const T& a, const T& b) {
for(auto x : a) {
cout << x << " ";
}
cout << endl;
for(auto x : b) {
cout << x << " ";
}
}
template<typename Iterator>
struct range { Iterator begin_, end_; };
template<typename T>
T begin(const range<T>& ar) { return ar.begin_; }
template<typename T>
T end(const range<T>& ar) { return ar.end_; }
template<typename T, size_t N>
range<T*> make_array_range(T (&array)[N])
{
using std::begin; using std::end;
return { begin(array), end(array) };
}
template<class T, size_t M, size_t N>
void func(const T (&a)[M], const T (&b)[N]) {
func(make_array_range(a), make_array_range(b));
}
int main() {
int a1[] = {1, 2};
int a2[] = {3, 4, 5};
func(a1, a2);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8Y2xhc3MgVD4Kdm9pZCBmdW5jKGNvbnN0IFQmIGEsIGNvbnN0IFQmIGIpIHsKCWZvcihhdXRvIHggOiBhKSB7CgkJY291dCA8PCB4IDw8ICIgIjsKCX0KCWNvdXQgPDwgZW5kbDsKCWZvcihhdXRvIHggOiBiKSB7CgkJY291dCA8PCB4IDw8ICIgIjsKCX0KfQoKdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+CnN0cnVjdCByYW5nZSB7IEl0ZXJhdG9yIGJlZ2luXywgZW5kXzsgfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+ClQgYmVnaW4oY29uc3QgcmFuZ2U8VD4mIGFyKSB7IHJldHVybiBhci5iZWdpbl87IH0KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+ClQgZW5kKGNvbnN0IHJhbmdlPFQ+JiBhcikgeyByZXR1cm4gYXIuZW5kXzsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IE4+CnJhbmdlPFQqPiBtYWtlX2FycmF5X3JhbmdlKFQgKCZhcnJheSlbTl0pCnsKICAgICB1c2luZyBzdGQ6OmJlZ2luOyB1c2luZyBzdGQ6OmVuZDsKICAgICByZXR1cm4geyBiZWdpbihhcnJheSksIGVuZChhcnJheSkgfTsKfQoKdGVtcGxhdGU8Y2xhc3MgVCwgc2l6ZV90IE0sIHNpemVfdCBOPgp2b2lkIGZ1bmMoY29uc3QgVCAoJmEpW01dLCBjb25zdCBUICgmYilbTl0pIHsKCWZ1bmMobWFrZV9hcnJheV9yYW5nZShhKSwgbWFrZV9hcnJheV9yYW5nZShiKSk7Cn0KCmludCBtYWluKCkgewoJaW50IGExW10gPSB7MSwgMn07CglpbnQgYTJbXSA9IHszLCA0LCA1fTsKCWZ1bmMoYTEsIGEyKTsKCXJldHVybiAwOwp9