#pragma once
// This file is a fork of AtCoder Library.#define E6NLAQ_INTERNAL_TYPE_TRAITS_HPP
#include<cassert>
#include<type_traits>namespacee6nlaq{namespaceinternal{#ifndef _MSC_VER
template<classT>usingis_signed_int128=typenamestd::conditional<std::is_same<T,__int128_t>::value||std::is_same<T,__int128>::value,std::true_type,std::false_type>::type;template<classT>usingis_unsigned_int128=typenamestd::conditional<std::is_same<T,__uint128_t>::value||std::is_same<T,unsigned__int128>::value,std::true_type,std::false_type>::type;template<classT>usingmake_unsigned_int128=typenamestd::conditional<std::is_same<T,__int128_t>::value,__uint128_t,unsigned__int128>;template<classT>usingis_integral=typenamestd::conditional<std::is_integral<T>::value||is_signed_int128<T>::value||is_unsigned_int128<T>::value,std::true_type,std::false_type>::type;template<classT>usingis_signed_int=typenamestd::conditional<(is_integral<T>::value&&std::is_signed<T>::value)||is_signed_int128<T>::value,std::true_type,std::false_type>::type;template<classT>usingis_unsigned_int=typenamestd::conditional<(is_integral<T>::value&&std::is_unsigned<T>::value)||is_unsigned_int128<T>::value,std::true_type,std::false_type>::type;template<classT>usingto_unsigned=typenamestd::conditional<is_signed_int128<T>::value,make_unsigned_int128<T>,typenamestd::conditional<std::is_signed<T>::value,std::make_unsigned<T>,std::common_type<T>>::type>::type;#else
template<classT>usingis_integral=typenamestd::is_integral<T>;template<classT>usingis_signed_int=typenamestd::conditional<is_integral<T>::value&&std::is_signed<T>::value,std::true_type,std::false_type>::type;template<classT>usingis_unsigned_int=typenamestd::conditional<is_integral<T>::value&&std::is_unsigned<T>::value,std::true_type,std::false_type>::type;template<classT>usingto_unsigned=typenamestd::conditional<is_signed_int<T>::value,std::make_unsigned<T>,std::common_type<T>>::type;#endif
template<classT>usingis_signed_int_t=std::enable_if_t<is_signed_int<T>::value>;template<classT>usingis_unsigned_int_t=std::enable_if_t<is_unsigned_int<T>::value>;template<classT>usingto_unsigned_t=typenameto_unsigned<T>::type;}// namespace internal}// namespace e6nlaq
#line 2 "include/e6nlaq/internal/type_traits.hpp"
// This file is a fork of AtCoder Library.#define E6NLAQ_INTERNAL_TYPE_TRAITS_HPP
#include<cassert>
#include<type_traits>namespacee6nlaq{namespaceinternal{#ifndef _MSC_VER
template<classT>usingis_signed_int128=typenamestd::conditional<std::is_same<T,__int128_t>::value||std::is_same<T,__int128>::value,std::true_type,std::false_type>::type;template<classT>usingis_unsigned_int128=typenamestd::conditional<std::is_same<T,__uint128_t>::value||std::is_same<T,unsigned__int128>::value,std::true_type,std::false_type>::type;template<classT>usingmake_unsigned_int128=typenamestd::conditional<std::is_same<T,__int128_t>::value,__uint128_t,unsigned__int128>;template<classT>usingis_integral=typenamestd::conditional<std::is_integral<T>::value||is_signed_int128<T>::value||is_unsigned_int128<T>::value,std::true_type,std::false_type>::type;template<classT>usingis_signed_int=typenamestd::conditional<(is_integral<T>::value&&std::is_signed<T>::value)||is_signed_int128<T>::value,std::true_type,std::false_type>::type;template<classT>usingis_unsigned_int=typenamestd::conditional<(is_integral<T>::value&&std::is_unsigned<T>::value)||is_unsigned_int128<T>::value,std::true_type,std::false_type>::type;template<classT>usingto_unsigned=typenamestd::conditional<is_signed_int128<T>::value,make_unsigned_int128<T>,typenamestd::conditional<std::is_signed<T>::value,std::make_unsigned<T>,std::common_type<T>>::type>::type;#else
template<classT>usingis_integral=typenamestd::is_integral<T>;template<classT>usingis_signed_int=typenamestd::conditional<is_integral<T>::value&&std::is_signed<T>::value,std::true_type,std::false_type>::type;template<classT>usingis_unsigned_int=typenamestd::conditional<is_integral<T>::value&&std::is_unsigned<T>::value,std::true_type,std::false_type>::type;template<classT>usingto_unsigned=typenamestd::conditional<is_signed_int<T>::value,std::make_unsigned<T>,std::common_type<T>>::type;#endif
template<classT>usingis_signed_int_t=std::enable_if_t<is_signed_int<T>::value>;template<classT>usingis_unsigned_int_t=std::enable_if_t<is_unsigned_int<T>::value>;template<classT>usingto_unsigned_t=typenameto_unsigned<T>::type;}// namespace internal}// namespace e6nlaq