using System;
using System.Collections.Generic;

class Item : IEquatable<Item>
{
    int value;

    public Item(int i)
    {
        value = i;
    }

    public override string ToString()
    {
        return value.ToString();
    }

    public bool Equals(Item obj)
    {
        return value.Equals(obj.value);
    }
}


class Program
{
    static void Main(string[] args)
    {
        // Container gewünschter Anfangskapazität erzeugen
        Stack<Item> container = new Stack<Item>();

        // Elemente in Container ablegen
        container.Push(new Item(10));
        container.Push(new Item(20));
        container.Push(new Item(30));
        container.Push(new Item(40));
        container.Push(new Item(50));

        // Elemente in Container mit Hilfe eines Enumerators durchlaufen und ausgeben    
        Console.WriteLine("\n Elemente in Auflistung: ");
        foreach (Item elem in container)
            Console.WriteLine(" {0}", elem);

        Console.WriteLine();

        // 1. Element auslesen
        Item item = container.Pop();
        Console.WriteLine(" ausgelesen: {0}", item);

        // Vorschau auf neues 1. Element 
        item = container.Peek();
        Console.WriteLine(" aktuell oberstes Element: {0}", item);

        Console.WriteLine("\n Elemente in Auflistung: ");
        foreach (Item elem in container)
            Console.WriteLine(" {0}", elem);
    }
}

