https://forum.dlang.org/post/hmrpwyqfoxwtywbznbrr@forum.dlang.org http://codeforces.com/contest/628/submission/16212299
TODO: reuse ideas from bound.d
TODO: Add function limit() static if (isPowerOf2!m) { return x & 2^^m - 1; } else { return x % m; }
invariant { assert (0 <= x && x < m); }
called after opBinary opUnary etc similar to what is done http://codeforces.com/contest/628/submission/16212299
TODO: Move to Phobos std.typecons
Module type within inclusive value range [0 .. m-1].
Similar to Ada's modulo type 0 mod m.