#include <iostream>

using namespace std;

template <typename T>
class Stack {
private:
    T datastore[100];
    int top;
public:
    Stack() {
        top = -1;
    }
    
    void push(T num) {
        datastore[++top] = num;
    }
    
    T pop() {
        return datastore[top--];
    }
    
    T peek() {
        return datastore[top];
    }
};


template<>
class Stack<string> {
private:
    string datastore[100];
    int top;
public:
    Stack() {
        top = -1;
    }
    
    void push(string val) {
        ++top;
        datastore[top] = val;
    }
    
    string pop() {
        string val = datastore[top];
        datastore[top] = "";
        --top;
        return val;
    }
    
    string peek() {
        return datastore[top];
    }
};
/*
int main()
{
    Stack<double> numbers;
    numbers.push(12);
    numbers.push(22);
    cout << numbers.pop() << endl;
    cout << numbers.peek() << endl;
    return 0;
}
*/