#include<bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(int)n;i++)
#define all(c) (c).begin(),(c).end()
#define pb push_back
#define dbg(...) do{cerr<<__LINE__<<": ";dbgprint(#__VA_ARGS__, __VA_ARGS__);}while(0);

using namespace std;

namespace std{template<class S,class T>struct hash<pair<S,T>>{size_t operator()(const pair<S,T>&p)const{return ((size_t)1e9+7)*hash<S>()(p.first)+hash<T>()(p.second);}};template<class T>struct hash<vector<T>>{size_t operator()(const vector<T> &v)const{size_t h=0;for(auto i : v)h=h*((size_t)1e9+7)+hash<T>()(i)+1;return h;}};}
template<class T>ostream& operator<<(ostream &os, const vector<T> &v){os<<"[ ";rep(i,v.size())os<<v[i]<<(i==v.size()-1?" ]":", ");return os;}template<class T>ostream& operator<<(ostream &os,const set<T> &v){os<<"{ "; for(const auto &i:v)os<<i<<", ";return os<<"}";}
template<class T,class U>ostream& operator<<(ostream &os,const map<T,U> &v){os<<"{";for(const auto &i:v)os<<" "<<i.first<<": "<<i.second<<",";return os<<"}";}template<class T,class U>ostream& operator<<(ostream &os,const pair<T,U> &p){return os<<"("<<p.first<<", "<<p.second<<")";}
void dbgprint(const string &fmt){cerr<<endl;}template<class H,class... T>void dbgprint(const string &fmt,const H &h,const T&... r){cerr<<fmt.substr(0,fmt.find(","))<<"= "<<h<<" ";dbgprint(fmt.substr(fmt.find(",")+1),r...);}
typedef long long ll;typedef vector<int> vi;typedef pair<int,int> pi;const int inf = (int)1e9;
const double EPS = 1e-8, INF = 1e12, PI = acos(-1.0);
typedef complex<double> P;
namespace std{
	bool operator<(const P& a, const P& b){
		return real(a) != real(b) ? real(a) < real(b) : imag(a) < imag(b);
	}
}
inline double cross(const P& a, const P& b){ return imag(conj(a)*b); }
inline double dot(const P& a, const P& b){ return real(conj(a)*b); }
struct L : public vector<P>{
	L(const P &a, const P &b) {
		push_back(a); push_back(b);
	}
};
typedef vector<P> G;
inline int ccw(P a, P b, P c) {
	b -= a; c -= a;
	if(cross(b, c) >  EPS)   return +1;      // counter clockwise
	if(cross(b, c) < -EPS)   return -1;      // clockwise
	if(dot(b, c)   < -EPS)   return +2;      // c--a--b on line
	if(norm(b)+EPS <norm(c)) return -2;      // a--b--c on line
	return 0;                                   // c is between a and b (inclusive)
}

P crosspoint(const L &l, const L &m) {
	double A = cross(l[1] - l[0], m[1] - m[0]);
	double B = cross(l[1] - l[0], l[1] - m[0]);
	if (abs(A) < EPS && abs(B) < EPS) return m[0]; // same line
	if (abs(A) < EPS) assert(false); // !!!PRECONDITION NOT SATISFIED!!!
	return m[0] + B / A * (m[1] - m[0]);
}
bool onL(const L &l, const P &p){
	return abs(ccw(l[0], l[1], p)) != 1;
}
int one(G a, G b){
	int ans = inf;
	//a[s]???b[t]?????´??\?????????
	if(onL(L(a[2], a[2] + a[0] - a[1]), b[2])) return 1;
	
	//a[s]??¨b[t]????????£?????§?????????
	double c = cross(a[1] - a[0], b[1] - b[0]);
	if(abs(c) > EPS) ans = min(ans, 2);
	return ans;
}
int two(G a, G b){
	int ans = inf;
	for(int s = 1; s < 3; s++) for(int t = 1; t < 3; t++){
		swap(a[s], a[1]); swap(b[t], b[1]);
		//a[s]???b[t]?????´??\?????????
		if(onL(L(a[1], a[1] + a[0] - a[2]), b[1])){
			P p = a[1];
			a[1] = b[1];
			ans = min(ans, one(a, b) + 1);
			ans = min(ans, one(b, a) + 1);
			//dbg(s, t, ans);
			a[1] = p;
		}
		//a[s]??¨b[t]????????£?????§?????????
		double c = cross(a[2] - a[0], b[2] - b[0]);
		if(abs(c) > EPS){
			P p = crosspoint(L(a[1], a[1] + a[2] - a[0]), L(b[1], b[1] + b[2] - b[0]));
			P a0 = a[1]; a[1] = p;
			P b0 = b[1]; b[1] = p;
			ans = min(ans, one(a, b) + 2);
			ans = min(ans, one(b, a) + 2);
			//dbg(s, t, ans);
			a[1] = a0; b[1] = b0;
		}
		swap(a[s], a[1]); swap(b[t], b[1]);
	}
	return ans;
}
int three(G a, G b){
	int ans = inf;
	rep(s, 3) rep(t, 3){
		swap(a[s], a[0]); swap(b[t], b[0]);
		//a[s]???b[t]?????´??\?????????
		if(onL(L(a[0], a[0] + a[1] - a[2]), b[0])){
			P p = a[0];
			a[0] = b[0];
			ans = min(ans, two(a, b) + 1);
			ans = min(ans, two(b, a) + 1);
			//dbg(s, t, ans);
			a[0] = p;
		}
		//a[s]??¨b[t]????????£?????§?????????
		double c = cross(a[2] - a[1], b[2] - b[1]);
		if(abs(c) > EPS){
			P p = crosspoint(L(a[0], a[0] + a[2] - a[1]), L(b[0], b[0] + b[2] - b[1]));
			P a0 = a[0]; a[0] = p;
			P b0 = b[0]; b[0] = p;
			ans = min(ans, two(a, b) + 2);
			ans = min(ans, two(b, a) + 2);
			//dbg(s, t, ans);
			a[0] = a0; b[0] = b0;
		}
		swap(a[s], a[0]); swap(b[t], b[0]);
	}
	return ans;
}

int main(){
	cin.tie(0); cin.sync_with_stdio(0);
	
	while(1){
		G a, b;
		rep(i, 3){
			int x, y; if(!(cin >> x >> y)) exit(0);
			a.emplace_back(x, y);
		}
		rep(i, 3){
			int x, y; cin >> x >> y;
			b.emplace_back(x, y);
		}
		int ans = inf;
		ans = min(ans, three(a, b));
		ans = min(ans, three(b, a));
		if(ans >= 5) cout << "Many" << endl;
		else cout << ans << endl;
	}
	return 0;
}

Measured memory_bytes: 3136