import java.util.Iterator;
public class ResizingArrayStack<Item> implements Iterable<Item>
{
private Item[] a=(Item[]) new Object[1];
private int N=0;
public boolean isEmpty(){return N==0;}
public int size(){return N;}
private void resize(int max)
{
Item[] temp=(Item[]) new Object[max];
for(int i=0;i<N;i++)
temp[i]=a[i];
a=temp;
}//end resize
public void push(Item item)
{
if(N==a.length) resize(2*a.length);
a[N++]=item;
}//end push
public Item pop()
{
Item item=a[--N];
a[N]=null;
if(N>0 && N==a.length/4) resize(a.length/2);
return item;
}//end pop
public Iterator<Item> iterator()
{return new ReverseArrayIterator();}
private class ReverseArrayIterator implements Iterator<Item>
{
private int i=N;
public boolean hasNext(){return i>0;}
public Item next(){return a[--i];}
public void remove(){}
}
public static void main(String[] args)
{
ResizingArrayStack<String> s;
s=new ResizingArrayStack();
while(!StdIn.isEmpty())
{
String item=StdIn.readString();
if(!item.equals("-"))
s.push(item);
}//end while
for(String i:s)
StdOut.printf(i+" ");
}
}