- #include <iostream> 
-   
- class Coord 
- { 
- private: 
- 	double x, y, z; 
-   
- public: 
- 	Coord(); 
- 	Coord(double, double, double); 
-   
- 	class setters { 
- 		friend class Coord; 
-   
- 	private: 
- 		explicit setters(Coord &); 
-   
- 	public: 
- 		setters(setters const &) = delete; 
- 		setters & operator=(setters const &) = delete; 
-   
- 		void x(double) const; 
- 		void y(double) const; 
- 		void z(double) const; 
-   
- 	private: 
- 		Coord & coord; 
- 	}; 
- 	friend class setters; 
-   
- 	class getters { 
- 		friend class Coord; 
-   
- 	private: 
- 		explicit getters(Coord const &); 
-   
- 	public: 
- 		getters(getters const &) = delete; 
- 		getters & operator=(getters const &) = delete; 
-   
- 		double x() const; 
- 		double y() const; 
- 		double z() const; 
-   
- 	private: 
- 		Coord const & coord; 
- 	}; 
- 	friend class getters; 
-   
- 	setters const set; 
- 	getters const get; 
- }; 
-   
- Coord::Coord() : x(0), y(0), z(0), set(*this), get(*this) { } 
-   
- Coord::Coord(double px, double py, double pz) : x(px), y(py), z(pz), set(*this), get(*this) { } 
-   
- Coord::setters::setters(Coord & c) : coord(c) { } 
-   
- void Coord::setters::x(double px) const { 
- 	coord.x = px; 
- } 
-   
- void Coord::setters::y(double py) const { 
- 	coord.y = py; 
- } 
-   
- void Coord::setters::z(double pz) const { 
- 	coord.z = pz; 
- } 
-   
- Coord::getters::getters(Coord const & c) : coord(c) { } 
-   
- double Coord::getters::x() const { 
- 	return coord.x; 
- } 
-   
- double Coord::getters::y() const { 
- 	return coord.y; 
- } 
-   
- double Coord::getters::z() const { 
- 	return coord.z; 
- } 
-   
- int main() { 
- 	Coord a(1,2,3); 
-   
- 	std::cout << a.get.x() << ' ' << a.get.y() << ' ' << a.get.z() << std::endl; 
-   
- 	a.set.x(5); 
- 	a.set.y(6); 
- 	a.set.z(7); 
-   
- 	std::cout << a.get.x() << ' ' << a.get.y() << ' ' << a.get.z() << std::endl; 
-   
- 	return 0; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQ29vcmQKewpwcml2YXRlOgoJZG91YmxlIHgsIHksIHo7CgkKcHVibGljOgoJQ29vcmQoKTsKCUNvb3JkKGRvdWJsZSwgZG91YmxlLCBkb3VibGUpOwoJCgljbGFzcyBzZXR0ZXJzIHsKCQlmcmllbmQgY2xhc3MgQ29vcmQ7CgkJCglwcml2YXRlOgoJCWV4cGxpY2l0IHNldHRlcnMoQ29vcmQgJik7CgkJCglwdWJsaWM6CgkJc2V0dGVycyhzZXR0ZXJzIGNvbnN0ICYpID0gZGVsZXRlOwoJCXNldHRlcnMgJiBvcGVyYXRvcj0oc2V0dGVycyBjb25zdCAmKSA9IGRlbGV0ZTsKCQkKCQl2b2lkIHgoZG91YmxlKSBjb25zdDsKCQl2b2lkIHkoZG91YmxlKSBjb25zdDsKCQl2b2lkIHooZG91YmxlKSBjb25zdDsKCQkKCXByaXZhdGU6CgkJQ29vcmQgJiBjb29yZDsKCX07CglmcmllbmQgY2xhc3Mgc2V0dGVyczsKCQoJY2xhc3MgZ2V0dGVycyB7CgkJZnJpZW5kIGNsYXNzIENvb3JkOwoJCQoJcHJpdmF0ZToKCQlleHBsaWNpdCBnZXR0ZXJzKENvb3JkIGNvbnN0ICYpOwoJCQoJcHVibGljOgoJCWdldHRlcnMoZ2V0dGVycyBjb25zdCAmKSA9IGRlbGV0ZTsKCQlnZXR0ZXJzICYgb3BlcmF0b3I9KGdldHRlcnMgY29uc3QgJikgPSBkZWxldGU7CgkJCgkJZG91YmxlIHgoKSBjb25zdDsKCQlkb3VibGUgeSgpIGNvbnN0OwoJCWRvdWJsZSB6KCkgY29uc3Q7CgkJCglwcml2YXRlOgoJCUNvb3JkIGNvbnN0ICYgY29vcmQ7Cgl9OwoJZnJpZW5kIGNsYXNzIGdldHRlcnM7CgkKCXNldHRlcnMgY29uc3Qgc2V0OwoJZ2V0dGVycyBjb25zdCBnZXQ7Cn07CgpDb29yZDo6Q29vcmQoKSA6IHgoMCksIHkoMCksIHooMCksIHNldCgqdGhpcyksIGdldCgqdGhpcykgeyB9CgpDb29yZDo6Q29vcmQoZG91YmxlIHB4LCBkb3VibGUgcHksIGRvdWJsZSBweikgOiB4KHB4KSwgeShweSksIHoocHopLCBzZXQoKnRoaXMpLCBnZXQoKnRoaXMpIHsgfQoKQ29vcmQ6OnNldHRlcnM6OnNldHRlcnMoQ29vcmQgJiBjKSA6IGNvb3JkKGMpIHsgfQoKdm9pZCBDb29yZDo6c2V0dGVyczo6eChkb3VibGUgcHgpIGNvbnN0IHsKCWNvb3JkLnggPSBweDsKfQoKdm9pZCBDb29yZDo6c2V0dGVyczo6eShkb3VibGUgcHkpIGNvbnN0IHsKCWNvb3JkLnkgPSBweTsKfQoKdm9pZCBDb29yZDo6c2V0dGVyczo6eihkb3VibGUgcHopIGNvbnN0IHsKCWNvb3JkLnogPSBwejsKfQoKQ29vcmQ6OmdldHRlcnM6OmdldHRlcnMoQ29vcmQgY29uc3QgJiBjKSA6IGNvb3JkKGMpIHsgfQoKZG91YmxlIENvb3JkOjpnZXR0ZXJzOjp4KCkgY29uc3QgewoJcmV0dXJuIGNvb3JkLng7Cn0KCmRvdWJsZSBDb29yZDo6Z2V0dGVyczo6eSgpIGNvbnN0IHsKCXJldHVybiBjb29yZC55Owp9Cgpkb3VibGUgQ29vcmQ6OmdldHRlcnM6OnooKSBjb25zdCB7CglyZXR1cm4gY29vcmQuejsKfQoKaW50IG1haW4oKSB7CglDb29yZCBhKDEsMiwzKTsKCQoJc3RkOjpjb3V0IDw8IGEuZ2V0LngoKSA8PCAnICcgPDwgYS5nZXQueSgpIDw8ICcgJyA8PCBhLmdldC56KCkgPDwgc3RkOjplbmRsOwoJCglhLnNldC54KDUpOwoJYS5zZXQueSg2KTsKCWEuc2V0LnooNyk7CgkKCXN0ZDo6Y291dCA8PCBhLmdldC54KCkgPDwgJyAnIDw8IGEuZ2V0LnkoKSA8PCAnICcgPDwgYS5nZXQueigpIDw8IHN0ZDo6ZW5kbDsKCQoJcmV0dXJuIDA7Cn0=