#include <iostream>
#include <algorithm>
using namespace std;
template <typename T, typename... Ts>
struct same {
using type = typename same<T, typename same<Ts...>::type>::type;
};
template <typename T>
struct same<T, T> {
using type = T;
};
template <typename T, std::size_t N>
struct same<T, T[N]> {
using type = T;
};
template <typename T, std::size_t N>
struct same<T[N], T[N]> {
using type = T;
};
template <typename T, std::size_t N>
struct same<T[N], T> {
using type = T;
};
template <typename T>
T sum(const T &v) { return v; }
template <typename T, std::size_t N>
T sum(const T (&v)[N]) {
return std::accumulate(std::begin(v), std::end(v), T{});
}
template <typename T, typename TT, typename... Ts>
typename same<T, TT, Ts...>::type sum(const T &v, const TT &w, const Ts&... rest) {
return sum(v) + sum(w,rest...);
}
int main() {
int a[] = {1,2,3};
cout << sum(1,a,1);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgpzdHJ1Y3Qgc2FtZSB7CiAgICB1c2luZyB0eXBlID0gdHlwZW5hbWUgc2FtZTxULCB0eXBlbmFtZSBzYW1lPFRzLi4uPjo6dHlwZT46OnR5cGU7Cn07CnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3Qgc2FtZTxULCBUPiB7CiAgICB1c2luZyB0eXBlID0gVDsKfTsKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4+CnN0cnVjdCBzYW1lPFQsIFRbTl0+IHsKICAgIHVzaW5nIHR5cGUgPSBUOwp9Owp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTj4Kc3RydWN0IHNhbWU8VFtOXSwgVFtOXT4gewogICAgdXNpbmcgdHlwZSA9IFQ7Cn07CnRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOPgpzdHJ1Y3Qgc2FtZTxUW05dLCBUPiB7CiAgICB1c2luZyB0eXBlID0gVDsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpUIHN1bShjb25zdCBUICZ2KSB7IHJldHVybiB2OyB9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTj4KVCBzdW0oY29uc3QgVCAoJnYpW05dKSB7IAoJcmV0dXJuIHN0ZDo6YWNjdW11bGF0ZShzdGQ6OmJlZ2luKHYpLCBzdGQ6OmVuZCh2KSwgVHt9KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRULCB0eXBlbmFtZS4uLiBUcz4KdHlwZW5hbWUgc2FtZTxULCBUVCwgVHMuLi4+Ojp0eXBlIHN1bShjb25zdCBUICZ2LCBjb25zdCBUVCAmdywgY29uc3QgVHMmLi4uIHJlc3QpIHsKICAgIHJldHVybiBzdW0odikgKyBzdW0odyxyZXN0Li4uKTsKfQoKaW50IG1haW4oKSB7CglpbnQgYVtdID0gezEsMiwzfTsKICAgIGNvdXQgPDwgc3VtKDEsYSwxKTsKCglyZXR1cm4gMDsKfQ==