import java.util.Iterator;public class Bag<Item> implements Iterable<Item>{ private Node first; private int N; private class Node { Item item; Node next; }//end class Node public boolean isEmpty(){return N==0;} public int size(){return N;} public void add(Item item) { Node oldfirst=first; first=new Node(); first.item=item; first.next=oldfirst; N++; }//end add public Iterator<Item> iterator() {return new ListIterator();} private class ListIterator implements Iterator<Item> { private Node current=first; public boolean hasNext(){return current!=null;} public void remove(){} public Item next() { Item item=current.item; current=current.next; return item; }//end next }//end Class ListIterator public static void main(String[] args) { Bag<String> b=new Bag<String>(); while(!StdIn.isEmpty()) { String item=StdIn.readString(); b.add(item); }//end while for(String item:b) StdOut.print(item+" "); }//end main }