#include #include #include #include #include #include #include #include using namespace std; typedef unsigned int u8; typedef int i8; const u8 MAX = 1e5+1; template struct std::formatter> { constexpr auto parse(format_parse_context& ctx)const { return ctx.begin(); } constexpr auto format(const std::vector& v, auto& ctx)const { auto out = ctx.out(); std::format_to(out, "["); for (size_t i = 0; i < v.size(); ++i) { if (i > 0) { std::format_to(out, ", "); } std::format_to(out, "{}", v[i]); } return std::format_to(out, "]"); } }; constexpr std::array initLog2() { std::array log2{}; log2[1] = 0; for (int i = 2; i <= (int)MAX - 1; i++) { log2[i] = log2[i / 2] + 1; } return log2; } class BitIntSet { private: constexpr static const std::array log2 = initLog2(); public: i8 data; constexpr explicit BitIntSet(i8 n) : data{n} {} constexpr int getLowbit() const { return this->data & ((~this->data) + 1); } constexpr int getLowbit(u8 n) const { return n & ((~n) + 1); } constexpr std::vector get1Dir() const { std::vector ret; int temp = this->data; while (temp != 0) { // #ifndef NDEBUG // std::cout< void print(const Args&...args){ ((std::cout< void println(const Args&...args){ ((std::cout<