Algebraic Methods in Combinatorics