#include <cstdio>
struct v3d
{
double x, y, z;
};
struct v3d_mr // multiplication result
{
double scalar;
v3d vector;
operator double () { return this->scalar; }
operator v3d () { return this->vector; }
};
v3d_mr operator * (const v3d &a, const v3d &b)
{
return
{
a.x*b.x + a.y*b.y + a.z*b.z,
{ a.y*b.z - a.z*b.y, a.z*b.x - a.x*b.z, a.x*b.y - b.x*a.y }
};
}
int main()
{
v3d a = {1, 2, 3}, b = {4, 5, 6};
double s = a * b;
v3d v = a * b;
printf("%lf\n", s);
printf("%lf %lf %lf\n", v.x, v.y, v.z);
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KCnN0cnVjdCB2M2QKewoJZG91YmxlIHgsIHksIHo7Cn07CgpzdHJ1Y3QgdjNkX21yIC8vIG11bHRpcGxpY2F0aW9uIHJlc3VsdAp7Cglkb3VibGUgc2NhbGFyOwoJdjNkIHZlY3RvcjsKCQoJb3BlcmF0b3IgZG91YmxlICgpIHsgcmV0dXJuIHRoaXMtPnNjYWxhcjsgfQoJb3BlcmF0b3IgdjNkICgpIHsgcmV0dXJuIHRoaXMtPnZlY3RvcjsgfQp9OwoKdjNkX21yIG9wZXJhdG9yICogKGNvbnN0IHYzZCAmYSwgY29uc3QgdjNkICZiKQp7CglyZXR1cm4KCXsKCQlhLngqYi54ICsgYS55KmIueSArIGEueipiLnosCgkJeyBhLnkqYi56IC0gYS56KmIueSwgYS56KmIueCAtIGEueCpiLnosIGEueCpiLnkgLSBiLngqYS55IH0KCX07Cn0KCmludCBtYWluKCkKewoJdjNkIGEgPSB7MSwgMiwgM30sIGIgPSB7NCwgNSwgNn07CgkKCWRvdWJsZSBzID0gYSAqIGI7Cgl2M2QgdiA9IGEgKiBiOwoJCglwcmludGYoIiVsZlxuIiwgcyk7CglwcmludGYoIiVsZiAlbGYgJWxmXG4iLCB2LngsIHYueSwgdi56KTsKCQoJcmV0dXJuIDA7Cn0=