1. Try modify your solution to the card shuffling problem. How can you shuffle the card only once and make sure the deck is satisfactorily shuffled? Hint: Use swap strategy but only swap with cards in the remainder of the deck. 2. 2a. Simulate Linked List which is composed of nodes. Each node has an integer values and a "next" pointer. Provide functions to "add" (add a node to the head), "remove" (remove the head node), "insert" (insert a node at an arbitrary position. note: you should be able to handle insertions at the head, tail and middle positions), "contains" (given a value, return a boolean indicating whether there is a node that has the same value). You have to implement your own data structures for the Linked List and can not use the "list" in STL. Try your best to fit your solution to the software engineering principles. 2b. Write an iterator class to iterate through the Linked List. Note: you should use the "friend" construct in C++;