Elements of Abstract Algebra