Exploring Abstract Algebra