#include <bits/stdc++.h>
#define REP(I, N) for (int I = 0; I < (N); ++I)
#define REPP(I, A, B) for (int I = (A); I < (B); ++I)
#define PII pair<int,int>
#define F first
#define S second
#define MP make_pair
typedef long long LL;
using namespace std;
const int SIZE = 2e6+10;
int x[SIZE],y[SIZE];
LL sqr(LL x){return x*x;}
PII pp[SIZE];
int pn;
int main(){
int N;scanf("%d",&N);
REP(i,N)scanf("%d%d",&x[i],&y[i]);
REP(i,N)REPP(j,i+1,N){
if(sqr(x[i])+sqr(y[i])==sqr(x[j])+sqr(y[j])){ //兩個點只有在與原點距離相同時才有可能配對
/* 兩個點的對稱軸可藉由把兩個點視為向量相加得到
* 並把得到的向量轉到第一第二象限,並除以x,y座標最大公因數
* 要注意兩向量和為零時為special case
*/
int dx=x[i]+x[j];
int dy=y[i]+y[j];
if(!dx&&!dy){ //兩向量和為零時,把其中一個向量旋轉九十度就是對稱軸
dx=y[i];
dy=-x[i];
}
if(!dx)pp[pn++]=MP(0,1);
else if(!dy)pp[pn++]=MP(1,0);
else{
int gg=__gcd(abs(dx),abs(dy));
dx/=gg;
dy/=gg;
if(dy<0){
dx=-dx;
dy=-dy;
}
pp[pn++]=MP(dx,dy);
}
}
}
sort(pp,pp+pn);
int ma=0;
long double an=acos(-1);
for(int i=0,j;i<pn;i=j){
for(j=i+1;j<pn&&pp[i]==pp[j];j++);
int cnt=j-i;
if(cnt>ma||(cnt==ma&&atan2(pp[i].S,pp[i].F)>an)){
ma=cnt;
an=atan2(pp[i].S,pp[i].F);
}
}
printf("%.3f\\n%d\\n",(double)(an*180/acos(-1)),N-2*ma);
return 0;
}