#include <iostream>
using namespace std;

template<typename T, size_t N>
ostream& operator<< (ostream& outA, T (& arr)[N]) {
	outA << arr[0];
	T (&next)[N-1] = reinterpret_cast<T(&)[N-1]>(arr[1]);
	outA << next;
	return outA;
}

template<typename T>
ostream& operator<< (ostream& outA, T (& arr)[1]) {
	outA << arr[0];
	return outA;
}

int main() {
	
	int a[] = {1, 2, 3, 4};
	
	cout << a;
	
	return 0;
}