// codesnip-guard: ord_tools #[cfg_attr(any(),rustfmt::skip)]pub use self::ord_tools::PartialOrdExt;#[cfg_attr(any(),rustfmt::skip)]mod ord_tools{pub trait PartialOrdExt:Sized{fn chmin(&mut self,other:Self);fn chmax(&mut self,other:Self);fn minmax(self,other:Self)->(Self,Self);}implPartialOrdExt for T where T:PartialOrd{#[inline]fn chmin(&mut self,other:Self){if*self>other{*self=other;}}#[inline]fn chmax(&mut self,other:Self){if*self(Self,Self){if self{$l};($l:expr,)=>{$crate::min!($l)};($l:expr,$r:expr)=>{($l).min($r)};($l:expr,$r:expr,)=>{$crate::min!($l,$r)};($l:expr,$r:expr,$($t:tt)*)=>{$crate::min!($crate::min!($l,$r),$($t)*)};}#[macro_export]macro_rules!chmin{($l:expr)=>{};($l:expr,)=>{};($l:expr,$r:expr)=>{{let r=$r;if$l>r{$l=r;}}};($l:expr,$r:expr,)=>{$crate::chmin!($l,$r)};($l:expr,$r:expr,$($t:tt)*)=>{$crate::chmin!($l,$r);$crate::chmin!($l,$($t)*)};}#[macro_export]macro_rules!max{($l:expr)=>{$l};($l:expr,)=>{$crate::max!($l)};($l:expr,$r:expr)=>{($l).max($r)};($l:expr,$r:expr,)=>{$crate::max!($l,$r)};($l:expr,$r:expr,$($t:tt)*)=>{$crate::max!($crate::max!($l,$r),$($t)*)};}#[macro_export]macro_rules!chmax{($l:expr)=>{};($l:expr,)=>{};($l:expr,$r:expr)=>{{let r=$r;if$l{$crate::chmax!($l,$r)};($l:expr,$r:expr,$($t:tt)*)=>{$crate::chmax!($l,$r);$crate::chmax!($l,$($t)*)};}#[macro_export]macro_rules!minmax{($($t:tt)*)=>{($crate::min!($($t)*),$crate::max!($($t)*))};}}