#include <iostream>
using namespace std;

template <typename T, int capacity>
class Queue
{
	int values[capacity];
	int size;
	
public:
	Queue();
	void add(int value);
	int getSize() const;
	int getValue(int index) const;

	template <int Other_capacity>
	Queue<T, capacity + Other_capacity> operator+(const Queue<T, Other_capacity>& obj) const;

	friend ostream& operator<<(ostream& out, const Queue &q) {
		for(int i = 0; i < q.size; ++i) {
			out << q.values[i] << " ";
		}
		out << endl;
		return out;
	}
};

template <typename T, int capacity>
Queue<T, capacity>::Queue()
{
	size = 0;
}

template <typename T, int capacity>
void Queue<T, capacity>::add(int value)
{
	if (size < capacity)
		values[size++] = value;
}

template <typename T, int capacity>
int Queue<T, capacity>::getSize() const {
	return size;
}

template <typename T, int capacity>
int Queue<T, capacity>::getValue(int index) const {
	return values[index];
}

template <typename T, int capacity>
template <int Other_capacity>
Queue<T, capacity + Other_capacity> Queue<T, capacity>::operator+(const Queue<T, Other_capacity>& obj) const {
    Queue<T, capacity + Other_capacity> result;
    for(int i = 0; i < size; ++i)
    	result.add(getValue(i));
    for(int i = 0; i < obj.getSize(); ++i)
    	result.add(obj.getValue(i));
    return result;
}

int main()
{
	Queue<int, 15> even;
	Queue<int, 10> odd;

	even.add(2);
	even.add(4);
	even.add(6);

	odd.add(1);
	odd.add(3);
	odd.add(5);

	Queue<int, 25> sum = even + odd;

	cout << sum;
	
	return 0;
}