#pragma GCC target("avx") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include #include using namespace std; using namespace atcoder; #ifdef DEBUG #include "_debug.h" #else #define tr(...) #define trp(a, ...) a #endif typedef long long ll; typedef unsigned long long ull; template using v = vector; template using vv = v>; template using vvv = v>; template using vvvv = v>; #define LR(i, n) for (int i = 0; i < (n); i++) #define LR2(i, s, e) for (int i = (s); i < (e); i++) #define RL(i, n) for (int i = (n)-1; i >= 0; i--) #define RL2(i, s, e) for (int i = (e)-1; i >= (s); i--) #define ALL(a) (a).begin(), (a).end() template > struct has_val : false_type {}; template struct has_val().val())>> : true_type {}; template ::value, nullptr_t> = nullptr> ostream &operator<<(ostream &out, const T &o) { return out << o.val(); } ostream &operator<<(ostream &out, const string &v) { for (auto i = v.cbegin(); i != v.cend(); i++) out << *i; return out; } template ostream &operator<<(ostream &out, const array &v) { for (auto i = v.cbegin(); i != v.cend(); i++) out << (i != v.cbegin() ? " " : "") << *i; return out; } template