////////////////////////// // _ ____ // // U /"\ u U /"___| // // \/ _ \/ \| | u // // / ___ \ | |/__ // // /_/ \_\ \____| // // \\ >> _// \\ // // (__) (__)(__)(__) // // Compro by NULLCT // ////////////////////////// // STL libs #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Boost #include #include #define ALL(LIST) (LIST.begin()), (LIST.end()) using namespace std; using boost::irange; using boost::multiprecision::cpp_int; constexpr long MOD = 1000000007; class UnionFind { public: vector par; UnionFind(long _n) : par(_n, -1) {} long root(long _n) { if (par[_n] < 0) return _n; else return par[_n] = root(par[_n]); } bool unite(long _main, long _sub) { long mainroot = root(_main); long subroot = root(_sub); if (mainroot == subroot) return false; par[mainroot] += par[subroot]; par[subroot] = mainroot; return true; } bool isSame(long _x, long _y) { return root(_x) == root(_y); } long size(long _n) { return -par[root(_n)]; } }; vector divisor(const long _n) { vector head, tail; for (long i = 1; i * i <= _n; i++) { if (_n % i == 0) { head.push_back(i); if (i * i != _n) tail.push_back(_n / i); } } head.insert(head.end(), tail.rbegin(), tail.rend()); return head; } long kadanes(const vector &_n) { long highestMax = 0, currentMax = 0, length = _n.size(); for (long i = 0; i < length; i++) { currentMax = max(_n[i], currentMax + _n[i]); highestMax = max(highestMax, currentMax); } return highestMax; } void execution(); int main() { cin.tie(nullptr); ios::sync_with_stdio(false); cout << fixed << setprecision(10); execution(); return 0; } #define int long //-------------------------------------------------------------- inline void execution() { string s; cin>>s; cout<