#!ruby -na f=->n,m{n<2?1%m:(t=1;(2..n).map{|i|i%=m;i=[i,i-m].min{|j|j.abs};t=(i*t)%m};t)} $F[1]&&p(f[*$F.map(&:to_i)])