import java.util.*; // for ArrayList public class GenericStackWithMultiply // example of creating a Generic Stack by implementing a Generic ArrayList { private ArrayList stack; // our instance datum public GenericStackWithMultiply() { stack=new ArrayList(); // instantiate an empty ArrayList of type E (the "E" is not needed here) } public int getSize() // use ArrayList's size method to get the current size of the stack { return stack.size(); } public E peek() // peek returns the top element, which is of type E { // this element will be located at the end of the ArrayList return stack.get(stack.size()-1); // at index size-1 } public E pop() // we need to get the top element (at size-1) and return it, removing { // this element E returnItem=stack.get(stack.size()-1); // the element is of type E stack.remove(stack.size()-1); // the remove operation does not return the item, so we have to get the item return returnItem; // and then remove it } public void push(E newItem) // add new item of type E to the stack { stack.add(newItem); // add inserts the item at the end (at location size) } public boolean isEmpty() // determine if stack is empty { return stack.isEmpty(); } public static double multiply(GenericStackWithMultiply s1, GenericStackWithMultiply s2) { double temp=0; int smaller=s1.getSize(); if(s2.getSize() GenericStackWithMultiply multiplyStacks(GenericStackWithMultiply s1, GenericStackWithMultiply s2) { GenericStackWithMultiply temp=new GenericStackWithMultiply<>(); int smaller=s1.getSize(); if(s2.getSize()