#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
struct point {
long double x, y;
// сложение
point operator+(point const &r) const {
return {x + r.x, y + r.y};
}
point &operator+=(point const &r) {
return *this = *this + r;
}
// унарный минус
point operator-() const {
return {-x, -y};
}
// вычитание
point operator-(point const &r) const {
return {x - r.x, y - r.y};
}
point &operator-=(point const &r) {
return *this = *this - r;
}
// скалярное и векторное произведения
long double operator*(point const &r) const {
return x * r.x + y * r.y;
}
long double operator^(point const &r) const {
return x * r.y - r.x * y;
}
long double argument() const {
return atan2(y, x);
}
long double length() const {
return sqrt(x * x + y * y);
}
point rotate(long double alpha) const {
return {x * cos(alpha) - y * sin(alpha), x * sin(alpha) + y * cos(alpha)};
}
};
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
point a{1, 1}, b{10, -12};
point c = (a + b).rotate(M_PI_2);
cout << c.length() << ' ';
cout << fixed << setprecision(10);
cout << c.argument() << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxpb21hbmlwPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBwb2ludCB7CiAgICBsb25nIGRvdWJsZSB4LCB5OwoKICAgIC8vINGB0LvQvtC20LXQvdC40LUKICAgIHBvaW50IG9wZXJhdG9yKyhwb2ludCBjb25zdCAmcikgY29uc3QgewogICAgICAgIHJldHVybiB7eCArIHIueCwgeSArIHIueX07CiAgICB9CiAgICBwb2ludCAmb3BlcmF0b3IrPShwb2ludCBjb25zdCAmcikgewogICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICsgcjsKICAgIH0KCiAgICAvLyDRg9C90LDRgNC90YvQuSDQvNC40L3Rg9GBCiAgICBwb2ludCBvcGVyYXRvci0oKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIHsteCwgLXl9OwogICAgfQoKICAgIC8vINCy0YvRh9C40YLQsNC90LjQtQogICAgcG9pbnQgb3BlcmF0b3ItKHBvaW50IGNvbnN0ICZyKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIHt4IC0gci54LCB5IC0gci55fTsKICAgIH0KICAgIHBvaW50ICZvcGVyYXRvci09KHBvaW50IGNvbnN0ICZyKSB7CiAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgLSByOwogICAgfQoKICAgIC8vINGB0LrQsNC70Y/RgNC90L7QtSDQuCDQstC10LrRgtC+0YDQvdC+0LUg0L/RgNC+0LjQt9Cy0LXQtNC10L3QuNGPCiAgICBsb25nIGRvdWJsZSBvcGVyYXRvcioocG9pbnQgY29uc3QgJnIpIGNvbnN0IHsKICAgICAgICByZXR1cm4geCAqIHIueCArIHkgKiByLnk7CiAgICB9CiAgICBsb25nIGRvdWJsZSBvcGVyYXRvcl4ocG9pbnQgY29uc3QgJnIpIGNvbnN0IHsKICAgICAgICByZXR1cm4geCAqIHIueSAtIHIueCAqIHk7CiAgICB9CgogICAgbG9uZyBkb3VibGUgYXJndW1lbnQoKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIGF0YW4yKHksIHgpOwogICAgfQogICAgbG9uZyBkb3VibGUgbGVuZ3RoKCkgY29uc3QgewogICAgICAgIHJldHVybiBzcXJ0KHggKiB4ICsgeSAqIHkpOwogICAgfQoKICAgIHBvaW50IHJvdGF0ZShsb25nIGRvdWJsZSBhbHBoYSkgY29uc3QgewogICAgICAgIHJldHVybiB7eCAqIGNvcyhhbHBoYSkgLSB5ICogc2luKGFscGhhKSwgeCAqIHNpbihhbHBoYSkgKyB5ICogY29zKGFscGhhKX07CiAgICB9Cn07CgppbnQgbWFpbigpIHsKCiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICBjb3V0LnRpZShudWxscHRyKTsKCiAgICBwb2ludCBhezEsIDF9LCBiezEwLCAtMTJ9OwogICAgcG9pbnQgYyA9IChhICsgYikucm90YXRlKE1fUElfMik7CgogICAgY291dCA8PCBjLmxlbmd0aCgpIDw8ICcgJzsKICAgIGNvdXQgPDwgZml4ZWQgPDwgc2V0cHJlY2lzaW9uKDEwKTsKICAgIGNvdXQgPDwgYy5hcmd1bWVudCgpIDw8ICdcbic7Cgp9Cg==