use std::ops::Range;
pub trait RangeExt<Idx> {
fn intersect(&self, other: Range<Idx>) -> Range<Idx>;
}
impl<Idx: Copy + Ord> RangeExt<Idx> for Range<Idx> {
fn intersect(&self, other: Range<Idx>) -> Range<Idx> {
let start = self.start.max(other.start);
let end = self.end.min(other.end);
start..end
}
}