#include <iostream>
#include <string>
#include <stdlib.h>

using namespace std;
template <typename T>
class BasicVector
{
private:
	int vector_size;
	int vector_capacity;
	T* data;

	void resize();

public:
	BasicVector(size_t capacity = 0);
	~BasicVector();

	void push_back(T);
	void insert(int, T);
};


template <typename T>
void BasicVector<T>::resize()
{
	T* temp = data;
	T* newDataCap = new T[vector_capacity * 2];
	this->data = newDataCap;
	for (int i = 0; i < vector_size; i++)
	{
		data[i] = temp[i];
	}
	vector_capacity *= 2;
	delete[] temp;
}

template <typename T>
BasicVector<T>::BasicVector(size_t capacity)
{
	if (capacity < 16)
	{
		capacity = 16;
	}
	else if (capacity >= 16 && capacity % 2 == 1)
	{
		capacity = capacity + 1;
	}
	vector_capacity = capacity;
	data = new T[vector_capacity];
	vector_size = 0;
}

template <typename T>
BasicVector<T>::~BasicVector()
{
	delete[] data;
}

template <typename T>
void BasicVector<T>::push_back(T element)
{
	if (vector_size == vector_capacity)
	{
		resize();
	}
	data[vector_size] = element;
	vector_size++;
}

template <typename T>
void BasicVector<T>::insert(int  elemNum, T element)
{
	if (vector_size == vector_capacity)
	{
		resize();
	}
	T* temp = new T[vector_size];

	for (int i = 0; i < vector_size; i++)
	{
		temp[i] = data[elemNum + i - 1];
	}

	for (int j = 0; j < vector_size; j++)
	{
		data[elemNum + j] = temp[j];
	}

	data[elemNum - 1] = element;

	vector_size++;

	delete[] temp;
}

template <typename T>
void theWorkingFunction(BasicVector<T> &vector)
{
	{
		int elemNum;
		T element;
		cin >> elemNum >> element;
		vector.insert(elemNum, element);
	}
	{
		T element;
		cin >> element;
		vector.push_back(element);
	}
}

int main()
{
	BasicVector<string> vector;
	theWorkingFunction(vector);
	return 0;
}