// codesnip-guard: XorBasis #[cfg_attr(any(),rustfmt::skip)]pub use self::xorbasis::XorBasis;#[cfg_attr(any(),rustfmt::skip)]mod xorbasis{#[doc=" Basis of xor operation."]#[derive(Debug,Clone,Default)]pub struct XorBasis{#[doc=" (reduced basis, coordinates, inserted basis)"]bases:Vec<(u64,u64,u64)>}impl XorBasis{#[doc=" Create a empty space."]pub fn new()->Self{Default::default()}#[doc=" Return (reduced basis, coordinate)."]#[doc=" Coordinate means if i-th bit is 1, x was reduced by i-th inserted basis."]pub fn reduce(&self,mut x:u64)->(u64,u64){let mut coord=0u64;for(i,(u,c,_))in self.bases.iter().enumerate(){if x>u^x{coord^=c^(1<bool{let(y,coord)=self.reduce(x);if y!=0{self.bases.push((y,coord,x));}y!=0}#[doc=" Return coordinate if element can be consisted by current basis."]pub fn find(&self,x:u64)->Option{let(y,coord)=self.reduce(x);if y==0{Some(coord)}else{None}}#[doc=" Return coordinate if element can be consisted by current basis."]pub fn basis(&self,x:u64)->Option>{let(y,coord)=self.reduce(x);if y==0{Some(self.bases.iter().enumerate().filter_map(|(i,(_,_,b))|{if coord&(1<for XorBasis{fn from_iter>(iter:T)->Self{let mut basis=XorBasis::default();for x in iter{basis.insert(x);}basis}}}