In this thesis we will be discussing the zig-zag graph product created by Reingold, Vadhan, and Widgerson. We will attempt to remedy what we feel is a gap in the current literature by focusing on the relationship between the enumeration of the edges, outlined in the product's definition, and the isomorphism classes of the product generated. This is accomplished by outlining a complete characterization of the zig-zag and replacement products of the complete graph on 5 vertices with the cycle graph on 4. A type of closed walk on K5 named a parity circuit is introduced in order to facilitate this classification. We conclude the thesis by introducing a generalization of the zig-zag product using a broader definition of directed and undirected graphs with incidence defined by general set functions. We then define a product of undirected graphs which we name the sandwich product. We then go on to show that the sandwich product can be used to define the zig-zag product.