LAB 8 In this long exercise, you model the chemical compounds made up of Hydrogen, Oxygen, Nitrogen and Carbon. You will need a struct atom. Consider the following: enum element {H,O,N,C}; struct atom { enum element what; \\ H,O,N or C struct atom* bond[4]; } Now, write the function void make_bond (struct atom * atom1, struct atom * atom2). This function takes two atoms as input and checks whether they are among the four elements above (by looking at what). If they are not, the function returns without doing anything. Then it checks whether they can still make bonds, in other words, their bonding capacity is not filled. Recall that Hydrogen makes 1 bond, Oxygen makes 2 bonds, Nitrogen makes 3 bonds and Carbon makes 4 bonds. If the bonding capacity of one of the atoms is filled, the function returns without doing anything. Finally, if the two atoms can still make bonds, the function connects them. That is, the function writes the address of the second atom in the array of bonds of the first atom and it writes the address of the first atom in the array of bonds of the second atom. (4 points for CENG, 7 points for EE) Use the function you wrote above to generate small molecules like carbon dioxide, water, etc. (2 points for CENG, 3 points for EE) Write the function void tell_molecule (struct atom * x). This function takes a pointer to an atom and iteratively looks at all the atoms that are, directly or indirectly, connected to it. In other words, it looks at the whole molecule. Then, the function prints out to the screen how many atoms of each type there are in this molecule. For example, if you send the address of any of the atoms in the carbon dioxide molecule you have just created to this function, the output should be like: 1 Carbon, 2 Oxygen (4 points for all)