Banks offer various types of accounts, such as savings, checking. Each of these accounts has various options. The figure shows the inheritance hierarchy of these bank accounts. Note that the class bankAccount is abstract. That is, we cannot instantiate objects of this class. The other classes are not abstract. bankAccount: Every bank account has an account number, the name of the owner, and a balance. Therefore, instance variables such as name, accountNumber, and balance should be declared in the abstract class bankAccount. Some operations common to all types of accounts are retrieve account owner's name, account number, and account balance; make deposits; withdraw money; and create monthly statement. So these functions have been implemented in the class. Some of these functions will be pure virtual. checkingAccount: A checking account is a bank account. Therefore, it inherits all the properties of a bank account. A checking account has no monthly service charge. Furthermore, this type of account pays interest, allows the account holder to write checks, and requires a minimum balance. savingsAccount: A savings account is a bank account. Therefore, it inherits all the properties of a bank account. Furthermore, a savings account also pays interest. Given the above mentioned classes, write a main program that creates a collection of at least 15 bank accounts. Make some of the bank accounts saving accounts and some of them checking accounts. Use one of the data structures discussed in class, ArrayList, vector, or LinkedList to hold your collection of bank accounts. Define the balance for some of the accounts to be less than $500 and some to be more than $500. After you have created your accounts print your account list, then withdraw $500 from all accounts and redisplay your list.