#include #include #include #include #include #include #include #include #include #include #include namespace utility { templatestruct equality_comparable; templatestruct addable; templatestruct subtractable; templatestruct multipliable; templatestruct dividable; templatedecltype(auto) operator!=(equality_comparableconst& lhs, equality_comparableconst& rhs) { return !lhs.operator==(rhs); } templatedecltype(auto) operator+(addableconst& lhs, addableconst& rhs) { auto x = lhs; x += rhs; return x; } templatedecltype(auto) operator-(subtractableconst& lhs, subtractableconst& rhs) { auto x = lhs; x -= rhs; return x; } templatedecltype(auto) operator*(multipliableconst& lhs, multipliableconst& rhs) { auto x = lhs; x *= rhs; return x; } templatedecltype(auto) operator/(dividableconst& lhs, dividableconst& rhs) { auto x = lhs; x /= rhs; return x; } templatestruct equality_comparable { decltype(auto) operator==(equality_comparableconst& rhs)const { return static_cast(*this) == static_cast(rhs); } friend decltype(auto) operator!=(equality_comparableconst& lhs, equality_comparableconst& rhs); }; templatestruct addable { decltype(auto) operator+=(addableconst& rhs) { return static_cast(*this) += static_cast(rhs); } friend decltype(auto) operator+(addableconst& lhs, addableconst& rhs); }; templatestruct subtractable { decltype(auto) operator-=(subtractableconst& rhs) { return static_cast(*this) -= static_cast(rhs); } friend decltype(auto) operator-(subtractableconst& lhs, subtractableconst& rhs); }; templatestruct multipliable { decltype(auto) operator*=(multipliableconst& rhs) { return static_cast(*this) *= static_cast(rhs); } friend decltype(auto) operator*(multipliableconst& lhs, multipliableconst& rhs); }; templatestruct dividable { decltype(auto) operator/=(dividableconst& rhs) { return static_cast(*this) /= static_cast(rhs); } friend decltype(auto) operator/(dividableconst& lhs, dividableconst& rhs); }; } namespace math { templateconstexpr T pow(T val, std::uint64_t p) { return p == 0 ? T(1) : p == 1 ? val : p == 2 ? val*val : p % 2 == 0 ? pow(pow(val, p / 2), 2) : pow(pow(val, p / 2), 2)*val; } templateconstexpr int ilog(T val, U base) { T v(1); for (int i{};;++i) { if (val <= v) { return i; } v *= base; } } templateclass mod_number: private utility::equality_comparable>, private utility::addable>, private utility::subtractable>, private utility::multipliable>, private utility::dividable> { std::uint64_t value; public: mod_number(std::uint64_t v = 0) :value(v%Mod) { } mod_number(int v) :value(v%Mod) { } mod_number(std::int64_t v) :value(v%Mod) { } mod_number(std::uint32_t v) :value(v%Mod) { } bool operator==(mod_number const& rhs) { return value == rhs.value; } auto& operator+=(mod_number const& rhs) { value += rhs.value; value %= Mod; return *this; } auto& operator-=(mod_number const& rhs) { value += Mod - rhs.value; value %= Mod; return *this; } auto& operator*=(mod_number const& rhs) { value *= rhs.value; value %= Mod; return *this; } auto& operator/=(mod_number const& rhs) { return operator*=(pow(rhs, Mod - 2)); } }; } namespace container { templateclass addtree { std::array data; T get(std::size_t left, std::size_t right, std::size_t i, std::size_t l, std::size_t r) { if (r <= left || right <= l) return T(); if (left <= l&&r <= right) { return data[i]; } else { return get(left, right, 2 * i + 1, l, (l + r) / 2) + get(left, right, 2 * i + 2, (l + r) / 2, r); } } public: addtree() :data{} { } void change(T const& val, std::size_t index) { T from = data[index + Size - 1]; for (std::size_t i = 1, c = math::ilog(Size, 2);i <= Size;(i <<= 1), --c) { data[i + (index >> c) - 1] -= from; data[i + (index >> c) - 1] += val; } } auto begin()const { return std::next(data.begin(), Size - 1); } auto end()const { return data.end(); } T get(std::size_t left, std::size_t right) { return left > right ? T() : get(left, right + 1, 0, 0, Size); } }; /*templateclass minmaxtree { std::array, 2 * Size - 1> data; T min(std::size_t left, std::size_t right, std::size_t i, std::size_t l, std::size_t r) { if (r <= left || right <= l) return std::numeric_limits::max(); if (left <= l&&r <= right) { return data[i].first; } else { return std::min( get(left, right, 2 * i + 1, l, (l + r) / 2), get(left, right, 2 * i + 2, (l + r) / 2, r)); } } T max(std::size_t left, std::size_t right, std::size_t i, std::size_t l, std::size_t r) { if (r <= left || right <= l) return std::numeric_limits::min(); if (left <= l&&r <= right) { return data[i].second; } else { return std::max( get(left, right, 2 * i + 1, l, (l + r) / 2), get(left, right, 2 * i + 2, (l + r) / 2, r)); } } std::size_t change(T const& val, std::size_t index, std::size_t shift) { if (shift == Size) { val[shift + index] = val; } else { auto s = change(val, index, shift << 1); val[shift + s - 1].first = std::min(val[2 * shift + 2 * s], val[2 * shift + 2 * s + 1]); val[shift + s - 1].second = std::max(val[2 * shift + 2 * s], val[2 * shift + 2 * s + 1]); } return index >> 1; } public: addtree() :data{} { } void change(T const& val, std::size_t index) { data[index + Size - 1] = val; } auto begin()const { return std::next(data.begin(), Size - 1); } auto end()const { return data.end(); } T min(std::size_t left, std::size_t right)const { return left > right ? std::numeric_limits::max() : min(left, right + 1, 0, 0, Size); } T max(std::size_t left, std::size_t right)const { return left > right ? std::numeric_limits::min() : min(left, right + 1, 0, 0, Size); } };*/ } void Main(); int main() { std::ios::sync_with_stdio(false); Main(); } //ここから頑張る void Main() { std::string str; std::cin >> str; std::cout << "Hello World!" << std::endl; }