Question 3: As part of the design for the SDG game, we need the capabaility to define simple class dictionaries that define raw materials, predicates to define derivatives and finished products. We have chosen the following cd to define cds. Cd_graph = "sdg" "class" "dictionary" NAdj_list EOF. NAdj_list = Adj Adj_list . Adj = "type" Vertex Neighbors . Neighbors: Product | Sum. Product = "product" "(" Any_vertex_list ")". Sum = "sum" "(" Vertex "|" Vertex ")". Any_vertex : Labeled_vertex | Syntax_vertex. Syntax_vertex = String. Labeled_vertex = ident ":" Vertex. Adj_list: NAdj_list | Empty_Adj_list . Any_vertex_list: Nany_vertex_list | Empty_vl. Nany_vertex_list = Any_vertex Any_vertex_list. Empty_vl = . Empty_Adj_list = . Vertex = ident. Part a: Use this cd to define a cd for describing instances of the knapsack problem. Part b: Use this cd to define a cd for CSP raw materials very similar to the cd that is used in your robot. Part c: Use this cd to define itself (first 4 classes only: