#include<bits/stdc++.h>
#define inf 1<<29
#define linf 1e18
#define eps (1e-6)
#define mod 1000000007
#define pi acos(-1)
#define f first
#define s second
#define mp make_pair
#define pb push_back
#define all(a) (a).begin(),(a).end()
#define pd(a) printf("%.10f\n",(double)(a))
#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define equals(a,b) (fabs((a)-(b))<eps)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<double,int> pdi;
typedef vector<int> vi;
typedef vector<pii> vpi;
const int dx[8]={1,0,-1,0,1,1,-1,-1};
const int dy[8]={0,1,0,-1,1,-1,1,-1};

class Point{
public:
  double x,y;
  Point(double x=0,double y=0):x(x),y(y){}

  Point operator+(Point p){ return Point(x+p.x,y+p.y);}
  Point operator-(Point p){ return Point(x-p.x,y-p.y);}
  Point operator*(double k){ return Point(x*k,y*k);}
  Point operator/(double k){ return Point(x/k,y/k);}
  bool operator<(Point p)const{ 
    return (x!=p.x ? x-p.x<-eps : y-p.y<-eps);}
  bool operator==(Point p)const{ 
    return fabs(x-p.x)<eps && fabs(y-p.y)<eps;}

  double abs(){ return sqrt(norm());}
  double norm(){ return (x*x+y*y);}
};
typedef Point Vector;
typedef vector<Point> Polygon;

class Segment{
public:
  Point p1,p2;
  Segment(Point p1=Point(),Point p2=Point()):p1(p1),p2(p2){}
};
typedef Segment Line;

double norm(Vector a){ return (a.x*a.x+a.y*a.y);}
double abs(Vector a){ return sqrt(norm(a));}
double dot(Vector a,Vector b){ return (a.x*b.x+a.y*b.y);}
double cross(Vector a,Vector b){ return (a.x*b.y-a.y*b.x);}

bool isParallel(Segment s,Segment t){
  return equals(cross(s.p1-s.p2,t.p1-t.p2),0.0);
}

double getDistanceLP(Line l,Point p){
  return abs(cross(l.p2-l.p1,p-l.p1)/abs(l.p2-l.p1));
}

Point getCrossPointLL(Line a,Line b){
  double A=cross(a.p2-a.p1,b.p2-b.p1);
  double B=cross(a.p2-a.p1,a.p2-b.p1);
  if(abs(A)<eps || abs(B)<eps)return b.p1;
  return b.p1+(b.p2-b.p1)*(B/A);
}

Point rotate(Point base,Point a,double r){
  Point b=a-base;
  a.x=b.x*cos((r/180.0)*pi)-b.y*sin((r/180.0)*pi);
  a.y=b.x*sin((r/180.0)*pi)+b.y*cos((r/180.0)*pi);
  a=a+base;
  return a;
}

double getAngle(Vector a,Vector b){
  double tmp=dot(a,b)/(abs(a)*abs(b));
  if(tmp<-1.0)tmp=-1.0;
  if(1.0<tmp)tmp=1.0;
  double r=acos(tmp)*180.0/pi;
  return r;
}

vector<Point> unique(vector<Point> vp){
  vector<Point> res;
  if(vp.empty())return res;
  sort(all(vp));
  res.pb(vp[0]);
  FOR(i,1,vp.size())if(!(vp[i]==res.back()))res.pb(vp[i]);
  return res;
}

typedef pair<Line,Line> pll;

int n;
vector<Segment> vs;
vector<Point> vp;

pll getS(Line a,Line b){
  Point m=getCrossPointLL(a,b);
  double r=getAngle(a.p1-a.p2,b.p1-b.p2);
  Line c(rotate(m,a.p1,r/2.0),rotate(m,a.p1,180+r/2.0));
  Line d(rotate(m,a.p1,(180.0-r)/2.0),rotate(m,a.p1,180+(180.0-r)/2.0));
  return mp(c,d);
}

bool check2(Point p){
  double dis=getDistanceLP(vs[0],p);
  FOR(i,1,n)
    if(!equals(dis,getDistanceLP(vs[i],p)))return false;
  return true;
}

void check1(Line a,Line b,Line c){
  Point d=getCrossPointLL(a,c),e=getCrossPointLL(b,c);
  Point m=d+(e-d)/2.0;
  Line L(m+(a.p1-a.p2),m);
  pll f=getS(a,c);
  d=getCrossPointLL(f.f,L);
  if(check2(d))vp.pb(d);
  d=getCrossPointLL(f.s,L);
  if(check2(d))vp.pb(d);
  pll s=getS(b,c);
  d=getCrossPointLL(s.f,L);
  if(check2(d))vp.pb(d);
  d=getCrossPointLL(s.s,L);
  if(check2(d))vp.pb(d);
  return;
}

void check3(pll a,pll b){
  if(!isParallel(a.f,b.f)){
    Point c=getCrossPointLL(a.f,b.f);
    if(check2(c))vp.pb(c);
  }
  if(!isParallel(a.f,b.s)){
    Point c=getCrossPointLL(a.f,b.s);
    if(check2(c))vp.pb(c);
  }
  if(!isParallel(a.s,b.f)){
    Point c=getCrossPointLL(a.s,b.f);
    if(check2(c))vp.pb(c);
  }
  if(!isParallel(a.s,b.s)){
    Point c=getCrossPointLL(a.s,b.s);
    if(check2(c))vp.pb(c);
  }
}

void solve(){
  if(n<=2){
    cout<<"Many"<<endl;
    return;
  }
  FOR(i,0,n){
    FOR(j,0,n){
      FOR(k,0,n){
        if(i==j || i==k || j==k)continue;
        if(isParallel(vs[i],vs[j]) && isParallel(vs[i],vs[k]))continue;
        else if(isParallel(vs[i],vs[j]))check1(vs[i],vs[j],vs[k]);
        //else if(isParallel(vs[j],vs[k]))check1(vs[j],vs[k],vs[i]);
        //else if(isParallel(vs[k],vs[i]))check1(vs[k],vs[i],vs[j]);
        else {
          pll a=getS(vs[i],vs[j]);
          pll b=getS(vs[j],vs[k]);
          pll c=getS(vs[k],vs[i]);
          check3(a,b);
         // check3(b,c);
         // check3(c,a);
        }
      }
    }
  }
  vp=unique(vp);
  if(vp.empty())cout<<"None"<<endl;
  else if(vp.size()>1)cout<<"Many"<<endl;
  else printf("%.10f %.10f\n",vp[0].x,vp[0].y);
  return;
}

int main()
{
  while(cin>>n && n){
    vs.clear();
    vp.clear();
    FOR(i,0,n){
      int a,b,c,d;
      cin>>a>>b>>c>>d;
      vs.pb(Segment(Point(a,b),Point(c,d)));
    }
    solve();
  }
  return 0;
}

Measured memory_bytes: 11456