Factoring Polynomials over Integers