An Introduction to Abstract Algebra (v. 2)