#include <iostream>

using namespace std;

template <typename T>
struct Coor
{
    T x, y;

	Coor(const T &a = T(), const T &b = T()) : x(a), y(b) {}
};

template <typename T, int N>
struct Access
{
	const T& operator() (const Coor<T> &coor) const;
};

template <typename T>
struct Access<T, 0>
{
	const T& operator() (const Coor<T> &coor) const
	{ return coor.x; }
};

template <typename T>
struct Access<T, 1>
{
	const T& operator() (const Coor<T> &coor) const
	{ return coor.y; }
};

int main()
{
	Coor<int> coor(0, 1);
	Access<int, 0> x_access;
	Access<int, 1> y_access;

	cout << x_access(coor) << ' ' << y_access(coor)  << '\n';
	return 0;
}

