#include #include #include #include #include namespace checker { std::string c_to_str(const int c) { if (c == '\n') { return "'\n'"; } if (c == std::char_traits::eof()) { return "eof"; } return std::string({'\'', char(c), '\''}); } int c_scan() { return std::cin.get(); } template SignedInteger i_scan(const SignedInteger lower, const SignedInteger upper, const int end) { using int_type = SignedInteger; int_type ret = 0; bool negative_flag = false; int c = c_scan(); if (c == '-') { negative_flag = true; c = c_scan(); } if (c < '0' || '9' < c) { std::cerr << "no digits" << std::endl; std::abort(); } while ('0' <= c && c <= '9') { c -= '0'; if (ret > (std::numeric_limits::max() - c) / 10) { std::cerr << "overflow" << std::endl; std::abort(); } ret = ret * 10 + c; c = c_scan(); }; if (c != end) { std::cerr << "expected " << c_to_str(end) << ", found " << c_to_str(c) << std::endl; std::abort(); } if (negative_flag) { ret = -ret; } if (ret < lower || upper < ret) { std::cerr << "range was [" << lower << ", " << upper << "], found " << ret << std::endl; std::abort(); } return ret; } void check() { int n = i_scan(1, 300000, '\n'); for (int i = 0; i != n - 1; ++i) { i_scan(1, 300000, ' '); } i_scan(1, 300000, '\n'); assert(c_scan() == std::char_traits::eof()); } } // namespace checker int main() { checker::check(); }