An Introduction to Abstract Algebra