You are permitted, and encouraged, to work together on these problems, provided that every contributor understands how the complete solution was found. Put the names of all contributors into comments at the top of your C file: /* assignment 7 */ /* Joe Bloggs */ /* Alice Smith */ Your solutions are due Friday 19 October at 17:00. Send each C file in a separate email message to djb-275-hw@cr.yp.to: mail djb-275-hw@cr.yp.to < ex7.c mail djb-275-hw@cr.yp.to < ex8.c You are permitted to use standard C library functions in these problems. 7. Write a copy program that, given command-line arguments f1 and f2, copies the contents of the file named f1 to a new file named f2. For example, copy dyn3.c ex5.c will create a new file named ex5.c with the same contents as the existing file named dyn3.c. If f2 already exists, your program must wipe out the previous contents of f2. If your program has any trouble reading f1 or writing f2, it must print an error message on stderr and exit. 8. Write a merge program that, given command-line arguments f1 and f2, reads lines from files f1 and f2, and prints the lines in lexicographic order. You may assume that the lines in f1 are already in order, and that the lines in f2 are already in order. You may also assume that each line consists entirely of lowercase letters followed by a newline. If these assumptions are violated, your program is permitted to produce strange output (for example, lines out of order), but it must not crash. For example, if f1 contains aardvark hello two and f2 contains food fried less then your program will print aardvark food fried hello less two in that order. The amount of memory used by your program must be proportional to the size of the longest line of input. If your program has any trouble reading f1, reading f2, or allocating memory, it must print an error message on stderr and exit.