pub fn baby_step_giant_step<M>(x: M::T, y: M::T, n: usize) -> Option<usize>where M: Monoid<T: Eq + Hash>,
$\min{0\le i < n | x^i=y}$