#include <iostream>
#include <cstdio>
#include <vector>
#include <complex>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <cstring>
#include <stack>
#include <cmath>
#include <iomanip>
#include <sstream>
#include <cassert>

using namespace std;

typedef long long ll;
typedef ll li;
typedef pair<int,int> PI;
#define EPS (1e-9)
#define rep(i,n) for(int i=0;i<(int)(n);++i)
#define REP(i,m,n) for(int i=m; i<=(int)(n); ++i)
#define F first
#define S second
#define mp(a,b) make_pair(a,b)
#define pb(a) push_back(a)
#define SZ(a) (int)((a).size())
#define ALL(a) a.begin(),a.end()
#define FOR(it,a) for(__typeof(a.begin())it=a.begin();it!=a.end();++it)
int dx[]={0,1,0,-1,1,1,-1,-1};
int dy[]={1,0,-1,0,-1,1,1,-1};


typedef complex<long double> P;
typedef pair<P, P> L;
typedef pair<P, long double> C;
namespace std {
bool operator < (const P &a, const P &b) { return make_pair(real(a), imag(a)) < make_pair(real(b), imag(b)); }
}
istream& operator >>(istream &in, P &p) { return in >> p.real() >> p.imag(); }
istream& operator >>(istream &in, L &l) { return in >> l.first >> l.second; }
istream& operator >>(istream &in, C &c) { return in >> c.first >> c.second; }


#define DI(l) ((l).second-(l).first)
#define EQ(a, b) (abs((a)-(b)) < EPS)
#define CCW(l, a) ccw((l).first, (l).second, (a))
long double cross(const P &a, const P &b) { return imag(conj(a)*b); }
long double dot(const P& a, const P& b) { return real(conj(a)*b); }
/* ccw(a, b, c)
 * +1: counter clockwise
 * -1: clockwise
 * +2: c--a--b    on L
 * -2:    a--b--c on L
 *  0: c is on a--b
 */
int ccw(P a, P b, P c) {
	long double d = cross(b -= a, c -= a);
	return d>EPS ? 1 : d<-EPS ? -1 : dot(b,c)<-EPS ? 2 : norm(b)+EPS<norm(c) ? -2 : 0;
}
bool parallel(const L &l, const L &m) { return EQ(cross(DI(l), DI(m)), 0); }
bool sameline(const L &l, const L &m) { return parallel(l, m) && EQ(cross(DI(l), m.second-l.first), 0); }

bool intersectLL(const L &l, const L &m) { return !parallel(l, m) || sameline(l, m); }
bool intersectLP(const L &l, const P &p) { return EQ(cross(l.second-p, l.first-p), 0); }
bool intersectSS(const L &s, const L &t) { return CCW(s,t.first)*CCW(s,t.second)<=0 && CCW(t,s.first)*CCW(t,s.second)<=0; }
bool intersectSP(const L &s, const P &p) { return EQ(abs(s.first-p)+abs(s.second-p)-abs(DI(s)), 0); }
P projection(const L &l, const P &p) { return l.first + dot(p-l.first, DI(l)) / norm(DI(l)) * DI(l); } 
P reflection(const L &l, const P &p) { return 2.0L * projection(l, p) - p; }
long double distanceLP(const L &l, const P &p) { return abs(p - projection(l, p)); }
long double distanceLL(const L &l, const L &m) { return intersectLL(l, m) ? 0 : distanceLP(l, m.first); }
long double distanceSP(const L &s, const P &p) {
	P r = projection(s, p);
	if (intersectSP(s, r)) return abs(r-p);
	return min(abs(s.first-p), abs(s.second-p));
}
long double distanceSS(const L &s, const L &t) {
	if (intersectSS(s, t)) return 0;
	return min(min(distanceSP(s, t.first), distanceSP(s, t.second)), min(distanceSP(t, s.first), distanceSP(t, s.second)));
}
P crosspoint(const L &l, const L &m) {
	P a = DI(l), b = DI(m);
	long double A = cross(a, b), B = cross(a, l.second-m.first);

  	assert(!EQ(abs(A), 0)); // should not be parallel (if A = B = 0, then the same L)
	return m.first + B / A * b;
}

int n;
L ls[110];

bool check(L l1, L l2) {
  if (parallel(l1, l2)) return false;
  P p = crosspoint(l1, l2);

  long double d = distanceLP(ls[0], p);
  rep(i, n) {
    if (!EQ(d, distanceLP(ls[i], p))) return false;
  }
  return true;
}

int main() {
  while(cin >> n && n) {
    rep(i, n) cin >> ls[i];
    vector<L> lss;
    rep(i, n) {
      bool ok = true;
      rep(j, i) if (sameline(ls[i], ls[j])) ok = false;
      if (ok) lss.pb(ls[i]);
    }

    n = SZ(lss);
    rep(i, n) ls[i] = lss[i];

    bool found = false;
    vector<P> ans;
    rep(i, n) {
      rep(j, n) rep(k, j) {
        if (j == i || k == i) continue;
        if (!parallel(ls[i], ls[j]) && !parallel(ls[i], ls[k])) {
          found = true;

          P p = crosspoint(ls[i], ls[j]);
          P d1 = DI(ls[i])/abs(DI(ls[i])) + DI(ls[j])/abs(DI(ls[j]));
          P d2 = DI(ls[i])/abs(DI(ls[i])) - DI(ls[j])/abs(DI(ls[j]));
          L l1(p, p + d1), l2(p, p + d2);

          P q = crosspoint(ls[i], ls[k]);
          P dq1 = DI(ls[i])/abs(DI(ls[i])) + DI(ls[k])/abs(DI(ls[k]));
          P dq2 = DI(ls[i])/abs(DI(ls[i])) - DI(ls[k])/abs(DI(ls[k]));
          L l3(q, q + dq1), l4(q, q + dq2);

          if (check(l1, l3)) ans.pb(crosspoint(l1, l3));
          if (check(l1, l4)) ans.pb(crosspoint(l1, l4));
          if (check(l2, l3)) ans.pb(crosspoint(l2, l3));
          if (check(l2, l4)) ans.pb(crosspoint(l2, l4));

          /*
          cout << l1.first << " " << d1 << endl;
          cout << l2.first << " " << d2 << endl;

          FOR(it, ans) printf("%.20f %.20f\n", it->real(), it->imag());
          */

          vector<P> nans;
          rep(i,SZ(ans)){
            bool ok = true;
            rep(j,i)
              ok &= !EQ(ans[i],ans[j]);
            if(ok) nans.pb(ans[i]);
          }
          ans = nans;
            
          goto AAA;
        }
      }
    }
  AAA:;
    
    //FOR(it,ans) cout << *it << endl;

    if (found) {
      if (SZ(ans) == 0) cout << "None" << endl;
      else if (SZ(ans) == 1)
        printf("%.8Lf %.8Lf\n", ans[0].real(), ans[0].imag());
      else cout << "Many" << endl;
    } else {
      bool ok = true;
      rep(i, n) if (!parallel(ls[0], ls[i])) ok = false;
      if (n <= 2) cout << "Many" << endl;
       else {
         assert(ok);
         cout << "None" << endl;
       }

    }

  }
}

Measured memory_bytes: 1340