Abstract Algebra with Applications