Abstract Algebra: A Concrete Introduction