solving congruences discrete math