//GenericLinkedListStack
import java.util.LinkedList;

public class GenericLinkedListStack<T> {
    private LinkedList<T> stackList;

    public GenericLinkedListStack() {
        stackList = new LinkedList<>();
    }

    public void push(T value) {
        stackList.addFirst(value);
    }

    public T pop() {
        if (isEmpty()) {
            System.out.println("Stack is empty.");
            return null;
        } else {
            return stackList.removeFirst();
        }
    }

    public T peek() {
        if (isEmpty()) {
            System.out.println("Stack is empty.");
            return null;
        } else {
            return stackList.getFirst();
        }
    }

    public boolean isEmpty() {
        return stackList.isEmpty();
    }

    public int size() {
        return stackList.size();
    }
}
//Main
public class Main {
    public static void main(String[] args) {
        // Stack for Integers
        GenericLinkedListStack<Integer> intStack = new GenericLinkedListStack<>();
        intStack.push(1);
        intStack.push(2);
        System.out.println(intStack.pop());  // Output: 2
        System.out.println(intStack.peek()); // Output: 1

        // Stack for Doubles
        GenericLinkedListStack<Double> doubleStack = new GenericLinkedListStack<>();
        doubleStack.push(1.1);
        doubleStack.push(2.2);
        System.out.println(doubleStack.pop());  // Output: 2.2
        System.out.println(doubleStack.peek()); // Output: 1.1

        // Stack for Strings
        GenericLinkedListStack<String> stringStack = new GenericLinkedListStack<>();
        stringStack.push("Hello");
        stringStack.push("World");
        System.out.println(stringStack.pop());  // Output: World
        System.out.println(stringStack.peek()); // Output: Hello
    }
}