#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>

using namespace std;
#define MAXN 1000
#define db double
#define EPS 1e-12
#define INF 1e12
#define rint register int
#define gc() getchar()
inline int read(rint ans = 0, rint sgn = ' ', rint ch = gc())
{
	for(; ch < '0' || ch > '9'; sgn = ch, ch = gc());
	for(; ch >='0' && ch <='9';(ans*=10)+=ch-'0', ch = gc());
	return sgn-'-'?ans:-ans;
}
#define BUF_SIZE 1000000
#define _END fwrite(_Ob,1,_O-_Ob,stdout), _O = _Ob
#define oc(a) (*_O++ = a)
char _Ob[BUF_SIZE+5], *_O = _Ob, _Os[25], *_Ot;
inline void os(string s){_O += s.copy(_O,s.length(),0), _O-_Ob >= BUF_SIZE-50 ? _END : 0;}
template <typename T> inline void oi(T x)
{
	if(!x){oc('0'); return;} if(x < 0) oc('-'), x = -x;
	for(_Ot = _Os; x; *_Ot++ = x%10+'0', x /= 10);
	for(; _Ot != _Os; oc(*--_Ot)); _O-_Ob >= BUF_SIZE-50 ? _END : 0;
}
struct Vector
{
	int i; db x,y; Vector(){} Vector(db _x, db _y){x=_x,y=_y;}
	inline Vector operator + (Vector b){return Vector(x+b.x,y+b.y);}
	inline Vector operator - (Vector b){return Vector(x-b.x,y-b.y);} inline Vector operator - (){return Vector(-x,-y);}
	inline db operator * (Vector b){return x*b.x+y*b.y;} inline db operator % (Vector b){return x*b.y-b.x*y;} inline db operator ~ (){return x*x+y*y;}
	inline bool operator ==(Vector b){return fabs(x-b.x) <= EPS && fabs(y-b.y) <= EPS;}
	inline bool operator !=(Vector b){return fabs(x-b.x) >  EPS || fabs(y-b.y) >  EPS;}
	inline bool operator < (Vector b){return fabs(y-b.y) <= EPS ? x < b.x : y < b.y;}
	inline Vector Unit(){static db _; return _ = sqrt(x*x+y*y), Vector( x/_,y/_);}
	inline Vector Norm(){static db _; return _ = sqrt(x*x+y*y), Vector(-y/_,x/_);}
	inline bool Quad(){return y > EPS || (fabs(y) <= EPS && x >= -EPS);}
};	typedef Vector Point;
inline Vector operator / (Vector a, db k){return Vector(a.x/k,a.y/k);}
inline Vector operator * (db k, Vector a){return Vector(k*a.x,k*a.y);} inline Vector operator * (Vector a, db k){return Vector(k*a.x,k*a.y);}
inline bool Para(Vector a, Vector b){return fabs(a%b) <= EPS;} inline bool ToLeft(Vector a, Vector b){return b%a > EPS;}
inline void O(Point a, char c = ' '){printf("(%.3f,%.3f)%c",a.x,a.y,c);}
struct Polygon
{
	Point p[MAXN+5]; int n;
	inline void clear(){n=0;} inline Point& operator[](int i){return p[i];} inline void push(Point o){p[++n] = o;} inline void pop(){--n;}
};
Point LTL; inline bool cmpltl(Point a, Point b){a = a-LTL, b = b-LTL; return Para(a,b) ? ~a < ~b : ToLeft(b,a);}
void CH(Point p[], int m, Polygon &R)
{R.clear(), LTL = *min_element(p+1,p+m+1), sort(p+1,p+m+1,cmpltl); for(rint i = 1; i <= m; R.push(p[i++])) for(; R.n>1 && !ToLeft(p[i]-R[R.n-1],R[R.n]-R[R.n-1]); R.pop());}
Point p[105]; int n; Polygon R; db Ans[105];
int main()
{
	n = read(); if(n==1) return puts("1"),0; if(n==2) return puts("0.5\n0.5"),0;
	for(rint i = 1; i <= n; p[i].i = i, p[i].x = read(), p[i].y = read(), i++); CH(p,n,R); R[0] = R[R.n], R[R.n+1] = R[1];
	for(rint i = 1; i <= R.n; i++)
	{
		double tmp = (R[i-1]-R[i]).Norm()*(R[i]-R[i+1]).Norm();
		Ans[R[i].i] = acos(tmp)/(2*3.141592653589793238462643383);
	}	for(rint i = 1; i <= n; printf("%.10lf\n",Ans[i]), i++); return 0;
}

Measured memory_bytes: 640