#include <bits/stdc++.h>

//#define DEBUG 1

#define int long long
#define for0(i,n) for (int i=0; i<n; i++)
#define iter(c) for(auto it=c.begin(); it!=c.end(); it++)
#define iter2(c) for(auto it2=c.begin(); it2!=c.end(); it2++)
#define pb push_back
#define ms(a,z) memset(a,z,sizeof(a));
#define mp make_pair
#define X first
#define Y second
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define all(a) a.begin(),a.end()
#define sz(x) (int)(x).size()
#define pmod(x,m) (((x)%(m)+m)%m)
#ifdef int
#define read(x) scanf("%lld",&x);
#else
#define read(x) scanf("%d",&x);
#endif

#ifdef DEBUG
#define nl cout<<"\n";
#define pr(x) cout<<(x)<<" ";
#define prl(x) cout<<#x " = "<<x<<endl;
#define prp(x) cout<<"("<<(x).first<<" "<<(x).second<<") ";
#define printv(v) {for(int _=0; _<sz(v); _++) cout<<v[_]<<" "; cout<<"\n";}
#define printa(a,s) {for (int _=0; _<s; _++) cout<<a[_]<<" "; cout<<"\n";}
#define print2D(a,m,n) {for (int _=0; _<m; _++) {for (int __=0; __<n; __++) cout<<a[_][__]<<" "; cout<<"\n";} cout<<"\n";}
#define priter(v) iter(v) {pr(*it)} nl
#define debug cout<<"ok at line "<<__LINE__<<endl;
#else
#define nl
#define pr(x)
#define prl(x)
#define prp(x)
#define printv(v)
#define printa(a,s)
#define print2D(a,m,n)
#define priter(v)
#define debug
#endif
#define MAXN 100000

using namespace std;

typedef long long ll;

const int INF = 2147483647;
const long long INFL = 9223372036854775807LL;
const double EPSILON = 0.00000001;
const long long MOD = 1000000007;

typedef pair<ll,ll> point;

long long cross ( pair <int , int > A , pair <int , int > B , pair <int, int > C) {
    return (B. first - A. first ) *( C. second - A. second )
    - (B. second - A. second ) *( C . first - A. first );
}

void convex_hull ( vector <point> pts , vector <point>& hull ) {
	hull.clear(); 
    sort ( pts . begin () , pts . end () );
	for (int i = 0; i < pts . size () ; i++) {
		while ( hull . size () >= 2 && cross ( hull [ hull . size ()-2] , hull . back () , pts [i ]) <= 0) {
            hull.pop_back () ;
		}
		hull.push_back(pts[i]) ;
	}
	int s = hull.size () ;
	for (int i = pts.size()-2; i >= 0; i--) {
		while ( hull.size() >= s+1 && cross(hull[hull.size()-2], hull.back() , pts[i]) <= 0) {
            hull.pop_back() ;
		}
		hull.push_back ( pts[i]) ;
	}
}

#define dist(A,B) sqrt((A.X-B.X)*(A.X-B.X) + (A.Y-B.Y)*(A.Y-B.Y))

double get_angle(point p1, point p2, point p3)
{
    pr("get_angle") prp(p1) prp(p2) prp(p3) nl
    double a = dist(p1,p2);
    double b = dist(p1,p3);
    double c = dist(p2,p3);
    pr(a) pr(b) pr(c) nl
    
    double cos_a = (c*c - a*a - b*b)/(-2*a*b);
    return acos(cos_a);
}

int32_t main()
{
    #ifdef DEBUG
    //freopen("B.txt","r",stdin);
    //freopen("","w",stdout);
    #endif

    int n;
    cin >> n;
    vector<point> points;
    for0(i,n) {
        int x,y;
        read(x); read(y);
        points.pb({x,y});
    }
    if (n == 1) {
        cout<<1<<endl;
    }
    else if (n == 2) {
        printf("0.5\n0.5\n");
    }
    else {
        vector<point> hull;
        convex_hull(points, hull);
        vector<double> angles;
        double angle_norm = 0;
        iter(hull) {prp(*it)} nl;
        for (int i=0; i<sz(hull)-1; i++) {
            point p1 = hull[i];
            point p2 = hull[i+1];
            point p3 = i > 0 ? hull[i-1] : hull[sz(hull)-2];
            double a = 3.141592653589793 - get_angle(p1,p2,p3);
            prl(a)
            angles.pb(a);
            angle_norm += a;
        }
        nl
        
        vector<double> ans(n,0);
        for (int i=0; i<sz(hull)-1; i++) {
            int idx = find(all(points),hull[i]) -  points.begin();
            prp(hull[i])
            prl(idx)
            ans[idx] = angles[i] / angle_norm;
        }
        for (int i=0; i<n; i++) {
            printf("%.9f\n",ans[i]);
        }
    }
    return 0;
}


Measured memory_bytes: 512