#include <iostream>
using namespace std;
namespace vector
{
class float3
{
public:
float x,y,z;
typedef float float3::*member_type;
public:
float3(float x,float y,float z):x(x),y(y),z(z)
{}
float3 operator()(member_type x,member_type y,member_type z)
{
return float3(*this.*x,*this.*y,*this.*z);
}
};
static constexpr float float3::*X=&float3::x;
static constexpr float float3::*Y=&float3::y;
static constexpr float float3::*Z=&float3::z;
}
int main() {
// your code goes here
using namespace vector;
float3 a(1,2,3);
auto b=a(Y,Z,X);
cout<<b.x<<b.y<<b.z<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbmFtZXNwYWNlIHZlY3Rvcgp7CmNsYXNzIGZsb2F0Mwp7CnB1YmxpYzoKZmxvYXQgeCx5LHo7Cgp0eXBlZGVmIGZsb2F0IGZsb2F0Mzo6Km1lbWJlcl90eXBlOwoKcHVibGljOgpmbG9hdDMoZmxvYXQgeCxmbG9hdCB5LGZsb2F0IHopOngoeCkseSh5KSx6KHopCnt9CgpmbG9hdDMgb3BlcmF0b3IoKShtZW1iZXJfdHlwZSB4LG1lbWJlcl90eXBlIHksbWVtYmVyX3R5cGUgeikKewpyZXR1cm4gZmxvYXQzKCp0aGlzLip4LCp0aGlzLip5LCp0aGlzLip6KTsKfQoKfTsKCnN0YXRpYyBjb25zdGV4cHIgZmxvYXQgZmxvYXQzOjoqWD0mZmxvYXQzOjp4OwpzdGF0aWMgY29uc3RleHByIGZsb2F0IGZsb2F0Mzo6Klk9JmZsb2F0Mzo6eTsKc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBmbG9hdDM6OipaPSZmbG9hdDM6Ono7Cgp9CgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKICAgIHVzaW5nIG5hbWVzcGFjZSB2ZWN0b3I7CiAgICBmbG9hdDMgYSgxLDIsMyk7CiAgICBhdXRvIGI9YShZLFosWCk7CiAgICBjb3V0PDxiLng8PGIueTw8Yi56PDxlbmRsOwoJcmV0dXJuIDA7Cn0g