- import math 
-   
- def floatRange(start, stop, step): 
-     i = start 
-     while i < stop: 
-         yield i 
-         i += step 
-   
- class Point: 
-     def __init__(self, x=0, y=0): 
-         self.x = x 
-         self.y = y 
-   
-     def squareDistTo(self, point): 
-         return (self.x-point.x)**2 + (self.y-point.y)**2 
-   
- class UnitCircle: 
-     def __init__(self, center=Point(0,0)): 
-         self.center = center 
-   
-     def __contains__(self, point): 
-         return self.center.squareDistTo(point) < 1.0 
-   
-     def overlappingArea(self, other): 
-         if self.center.squareDistTo(other.center) >= 2: 
-             return 0 
-         inSelf = inBoth = 0 
-         for i in floatRange(-1.0, 1.0, 0.002): 
-             for j in floatRange(-1.0, 1.0, 0.002): 
-                 p = Point(self.center.x + i, self.center.y + j) 
-                 if p in self: 
-                     inSelf += 1 
-                     if p in other: 
-                         inBoth += 1 
-         return math.pi * inBoth / inSelf 
-   
- if __name__ == '__main__': 
-     x, y, u, w = [float(s) for s in raw_input().split()] 
-     a = UnitCircle(Point(x,y)) 
-     b = UnitCircle(Point(u,w)) 
-     print 2*math.pi - a.overlappingArea(b) 
-   
				aW1wb3J0IG1hdGgKCmRlZiBmbG9hdFJhbmdlKHN0YXJ0LCBzdG9wLCBzdGVwKToKICAgIGkgPSBzdGFydAogICAgd2hpbGUgaSA8IHN0b3A6CiAgICAgICAgeWllbGQgaQogICAgICAgIGkgKz0gc3RlcAoKY2xhc3MgUG9pbnQ6CiAgICBkZWYgX19pbml0X18oc2VsZiwgeD0wLCB5PTApOgogICAgICAgIHNlbGYueCA9IHgKICAgICAgICBzZWxmLnkgPSB5CgogICAgZGVmIHNxdWFyZURpc3RUbyhzZWxmLCBwb2ludCk6CiAgICAgICAgcmV0dXJuIChzZWxmLngtcG9pbnQueCkqKjIgKyAoc2VsZi55LXBvaW50LnkpKioyCgpjbGFzcyBVbml0Q2lyY2xlOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNlbnRlcj1Qb2ludCgwLDApKToKICAgICAgICBzZWxmLmNlbnRlciA9IGNlbnRlcgoKICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgcG9pbnQpOgogICAgICAgIHJldHVybiBzZWxmLmNlbnRlci5zcXVhcmVEaXN0VG8ocG9pbnQpIDwgMS4wCgogICAgZGVmIG92ZXJsYXBwaW5nQXJlYShzZWxmLCBvdGhlcik6CiAgICAgICAgaWYgc2VsZi5jZW50ZXIuc3F1YXJlRGlzdFRvKG90aGVyLmNlbnRlcikgPj0gMjoKICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICBpblNlbGYgPSBpbkJvdGggPSAwCiAgICAgICAgZm9yIGkgaW4gZmxvYXRSYW5nZSgtMS4wLCAxLjAsIDAuMDAyKToKICAgICAgICAgICAgZm9yIGogaW4gZmxvYXRSYW5nZSgtMS4wLCAxLjAsIDAuMDAyKToKICAgICAgICAgICAgICAgIHAgPSBQb2ludChzZWxmLmNlbnRlci54ICsgaSwgc2VsZi5jZW50ZXIueSArIGopCiAgICAgICAgICAgICAgICBpZiBwIGluIHNlbGY6CiAgICAgICAgICAgICAgICAgICAgaW5TZWxmICs9IDEKICAgICAgICAgICAgICAgICAgICBpZiBwIGluIG90aGVyOgogICAgICAgICAgICAgICAgICAgICAgICBpbkJvdGggKz0gMQogICAgICAgIHJldHVybiBtYXRoLnBpICogaW5Cb3RoIC8gaW5TZWxmCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgeCwgeSwgdSwgdyA9IFtmbG9hdChzKSBmb3IgcyBpbiByYXdfaW5wdXQoKS5zcGxpdCgpXQogICAgYSA9IFVuaXRDaXJjbGUoUG9pbnQoeCx5KSkKICAgIGIgPSBVbml0Q2lyY2xlKFBvaW50KHUsdykpCiAgICBwcmludCAyKm1hdGgucGkgLSBhLm92ZXJsYXBwaW5nQXJlYShiKQo=