#include <iostream>
#include <array>
#include <numeric>
#include <cmath>
template <typename T, unsigned S>
struct vec {
T v[S];
T const* begin() const { return v; }
T const* end() const { return v+S; }
auto length() const-> decltype(std::sqrt(std::declval<T>()))
{
auto square = [](T const& a, T const& b){return a+b*b;};
T sum_of_squares = std::accumulate(begin(), end(), T{}, square);
return std::sqrt(sum_of_squares);
}
};
int main()
{
vec<int, 3> v = {{2,1,2}};
std::cout << v.length() << '\n';
vec<int, 2> v2 = {{6,8}};
std::cout << v2.length() << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDxudW1lcmljPgojaW5jbHVkZSA8Y21hdGg+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdW5zaWduZWQgUz4Kc3RydWN0IHZlYyB7CiAgVCB2W1NdOwoKICBUIGNvbnN0KiBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIHY7IH0KICBUIGNvbnN0KiBlbmQoKSAgIGNvbnN0IHsgcmV0dXJuIHYrUzsgfQoKICBhdXRvIGxlbmd0aCgpIGNvbnN0LT4gZGVjbHR5cGUoc3RkOjpzcXJ0KHN0ZDo6ZGVjbHZhbDxUPigpKSkKICB7CiAgICBhdXRvIHNxdWFyZSA9IFtdKFQgY29uc3QmIGEsIFQgY29uc3QmIGIpe3JldHVybiBhK2IqYjt9OwogICAgVCBzdW1fb2Zfc3F1YXJlcyA9IHN0ZDo6YWNjdW11bGF0ZShiZWdpbigpLCBlbmQoKSwgVHt9LCBzcXVhcmUpOwogICAgcmV0dXJuIHN0ZDo6c3FydChzdW1fb2Zfc3F1YXJlcyk7CiAgfQp9OwoKaW50IG1haW4oKQp7CiAgdmVjPGludCwgMz4gdiA9IHt7MiwxLDJ9fTsKICBzdGQ6OmNvdXQgPDwgdi5sZW5ndGgoKSA8PCAnXG4nOwoKICB2ZWM8aW50LCAyPiB2MiA9IHt7Niw4fX07CiAgc3RkOjpjb3V0IDw8IHYyLmxlbmd0aCgpIDw8ICdcbic7Cn0K