#include <bits/stdc++.h>
using namespace std;

#define NDEBUG
#ifdef DEBUG
#include "../cout11.h"
#undef NDEBUG
#endif
#include <cassert>

typedef long long ll;
typedef long double Double;
typedef unsigned long long ull;
typedef pair<int,int> ii;
typedef pair<ll,ll> llll;
typedef pair<double,double> dd;

typedef vector<int> vi;
typedef vector<vector<int>> vvi;
typedef vector<ii> vii;
typedef vector<vector<ii>> vvii;
typedef vector<ll> vll;
typedef vector<string> vs;
typedef vector<double> vd;
typedef vector<long double> vD;

#define sz(a)  int((a).size())
#define pb  push_back
#define FOR(var,from,to) for(int var=(from);var<=(to);++var)
#define rep(var,n)  for(int var=0;var<(n);++var)
#define rep1(var,n)  for(int var=1;var<=(n);++var)
#define repC2(vari,varj,n)  for(int vari=0;vari<(n)-1;++vari)for(int varj=vari+1;varj<(n);++varj)
#define ALL(c)  (c).begin(),(c).end()
#define RALL(c)  (c).rbegin(),(c).rend()
#define tr(i,c)  for(auto i=(c).begin(); i!=(c).end(); ++i)
#define found(s,e)  ((s).find(e)!=(s).end())
#define mset(arr,val)  memset(arr,val,sizeof(arr))
#define mid(x,y) ((x)+((y)-(x))/2)
#define IN(x,a,b) ((a)<=(x)&&(x)<=(b))
#define cons make_pair


typedef complex<double> Point;

namespace std {
    bool operator<(const Point& a, const Point& b) {
        return real(a) != real(b) ? real(a) < real(b) : imag(a) < imag(b);
    }
}
double cross(const Point& a, const Point& b) {
    return imag(conj(a) * b);
}
double dot(const Point& a, const Point& b) {
    return real(conj(a) * b);
}
// norm

int ccw(Point a, Point b, Point c) {
    // 与えられた三点 a, b, c を a → b → c と進むとき，
    // a → b で時計方向に折れて b → c
    // a → b で半時計方向に折れて b → c
    // a → b で逆を向いて a を通り越して b → c
    // a → b でそのまま b → c
    // a → b で逆を向いて b → c ( または b == c )
    b -= a;
    c -= a;
    if (cross(b, c) > 0)   return +1;       // counter clockwise
    if (cross(b, c) < 0)   return -1;       // clockwise
    if (dot(b, c) < 0)     return +2;       // c--a--b on line
    if (norm(b) < norm(c)) return -2;       // a--b--c on line
    return 0;
}

vector<int> convex_hull(int n, vi& x, vi& y) {
    vector<pair<Point,int>> work(n);
    rep(i, n){
        work[i] = make_pair(Point(x[i],y[i]), i);
    }
    sort(ALL(work));

    vector<int> ch(n*2);
    int k = 0;
    // rep(i,n) {
    // for (int i=0; i<n; ++i) { // lower-hull
    for (int i=0; i<n; ++i) { // lower-hull
        while (k >= 2 && ccw(work[ch[k-2]].first, work[ch[k-1]].first, work[i].first) <= 0) --k;
        // ch[k++]=points[i++]
        ch[k++] = i;
    }
    for (int i=n-2, t=k+1; i>=0; --i) { // upper-hull
        while (k >= t && ccw(work[ch[k-2]].first, work[ch[k-1]].first, work[i].first) <= 0) --k;
        ch[k++] = i;
    }
    ch.resize(k-1);

    vector<int> res(k-1);
    rep(i, k-1) {
        res[i] = work[ch[i]].second;
    }
    return res;
}

// vector<int> convex_hull(int N, vi& x, vi& y) {
//     vector<int> indices;
//     return indices;
// }

void solve(int N, vi& x, vi& y) {
    vi ix = convex_hull(N, x, y);
    int L = ix.size();
    vector<double> th;
    rep(i, L) {
        int i0 = ix[i], i1 = ix[(i+1)%L];
        int dx = x[i1] - x[i0], dy = y[i1] - y[i0];
        // それを90度右へ
        int rx = dy, ry = -dx;
        double th0 = atan2(ry, rx);
        th.pb(th0);
        // これより右はi0, 左はi1
    }
    vector<double> ratio(N, 0.0);
    rep(i, L) {
        double thM = th[(i-1+L)%L], th0 = th[i%L];
        double dth = th0 - thM;
        double r = dth / (M_PI * 2);
        if (r < 0) r += 1.0;
        ratio[ ix[i] ] = r;
    }
    rep(i,N) {
        printf("%.20f\n", ratio[i]);
    }
}

int main() {
    int N; cin >> N;
    vi x(N), y(N);
    rep(i,N) cin >> x[i] >> y[i];
    solve(N,x,y);
    return 0;
}


Measured memory_bytes: 512