#include #include #include #include #include #include #include #include #include #include #include using namespace std; #define debug(arg) print(#arg, arg) // std::cerr << arg が元々使えるやつはそれを使う template void out(Tp arg) { std::cerr << arg; } // std::pair の出力 template void out(std::pair arg) { std::cerr << '('; out(arg.first); std::cerr << ", "; out(arg.second); std::cerr << ')'; } // std::tuple の出力 template void print_tuple(T arg, std::index_sequence) { static_cast(((std::cerr << (Is == 0 ? "" : ", "), out(std::get(arg))), ...)); } template void out(std::tuple arg) { std::cerr << '('; print_tuple(arg, std::make_index_sequence()); std::cerr << ')'; } // std::{vector, deque, forward_list, list, initializer_list, set, multiset, unordered_set, unordered_multiset, map, multimap, unordered_map, unordered_multimap, valarray} の出力 template