#include using namespace std; namespace arithmetic { template class Addition { public: template T operator+(const V& v) const { T res(static_cast(*this)); return res += static_cast(v); } }; template class Subtraction { public: template T operator-(const V& v) const { T res(static_cast(*this)); return res -= static_cast(v); } }; template class Multiplication { public: template T operator*(const V& v) const { T res(static_cast(*this)); return res *= static_cast(v); } }; template class Division { public: template T operator/(const V& v) const { T res(static_cast(*this)); return res /= static_cast(v); } }; template class Modulus { public: template T operator%(const V& v) const { T res(static_cast(*this)); return res %= static_cast(v); } }; } template class IndivisibleArithmetic : public arithmetic::Addition, public arithmetic::Subtraction, public arithmetic::Multiplication {}; template class Arithmetic : public IndivisibleArithmetic, public arithmetic::Division {}; template class Ordered { public: template bool operator==(const V& v) const { return !(static_cast(v) < static_cast(*this) || static_cast(*this) < static_cast(v)); } template bool operator!=(const V& v) const { return static_cast(v) < static_cast(*this) || static_cast(*this) < static_cast(v); } template bool operator>(const V& v) const { return static_cast(v) < static_cast(*this); } template bool operator<=(const V& v) const { return !(static_cast(v) < static_cast(*this)); } template bool operator>=(const V& v) const { return !(static_cast(*this) < static_cast(v)); } }; class Real : public Arithmetic, public arithmetic::Modulus, public Ordered { private: static long double EPS; long double val; public: Real() {} Real(long double val) : val(val) {} template Real operator+=(const T& r) { val += static_cast(r); return *this; } template Real operator-=(const T& r) { val -= static_cast(r); return *this; } template Real operator*=(const T& r) { val *= static_cast(r); return *this; } template Real operator/=(const T& r) { val /= static_cast(r); return *this; } template Real operator%=(const T& r) { long double v = static_cast(r); val -= floor(val / v) * v; return *this; } template bool operator<(const T r) const { return val < static_cast(r) - EPS; } operator long double() const { return val; } }; long double Real::EPS = 1e-8; inline ostream& operator<<(ostream& os, const Real& a) { stringstream ss; ss << fixed << setprecision(15) << (long double)a; os << ss.str(); return os; } inline istream& operator>>(istream& is, Real& a) { long double n; is >> n; a = n; return is; } class Point : public Arithmetic { public: Real x, y; Point() {} Point(const Real& x) : x(x), y(0) {} Point(const Real& x, const Real& y) : x(x), y(y) {} Point operator+=(const Point& p) { x += p.x; y += p.y; return *this; } Point operator-=(const Point& p) { x -= p.x; y -= p.y; return *this; } Point operator*=(const Point& p) { Real xx = x * p.x - y * p.y; y = x * p.y + y * p.x; x = xx; return *this; } Point operator/=(const Point& p) { Real nrm = p.norm(); Real xx = (x * p.x + y * p.y) / nrm; y = (y * p.x - x * p.y) / nrm; x = xx; return *this; } Real norm() const { return x * x + y * y; } Real abs() const { return sqrt(norm()); } }; inline Real norm(const Point& point) { return point.norm(); } inline ostream& operator<<(ostream& os, const Point& point) { os << point.x << " " << point.y; return os; } inline istream& operator>>(istream& is, Point& point) { Real x, y; is >> x >> y; point = Point(x, y); return is; } template inline T gcd(T a, T b) { return __gcd(a, b); } template inline T lcm(T a, T b) { return a / gcd(a, b) * b; } template inline T floor(T a, T b) { return a / b * b <= a ? a / b : a / b - 1; } template inline T ceil(T a, T b) { return floor(a + b - 1, b); } template inline T round(T a, T b) { return floor(a + b / 2); } int main() { Point p; cin >> p; cout << (int)floor(p.abs() * 2 + 1, Real(1)) << endl; }