#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define EPS 1e-8

using namespace std;

typedef complex<double> C;

const double PI = 4*atan(1.0);

bool eq(double a,double b)
{
    return (-EPS<a-b&&a-b<EPS);
}

namespace std
{
    bool operator< (const C a, const C b){
        return a.real() != b.real() ? a.real() < b.real() : a.imag() < b.imag();
    }
    bool operator==(const C a,const C b){
        return (eq(a.real(),b.real()) && eq(a.imag(),b.imag()));
    }
    bool operator!=(const C a, const C b){
        return !(a == b);
    }
}

struct L : public vector<C>
{
    L(){}
    L(const C a,const C b){
        push_back(a), push_back(b);
    }
};

double cross(const C a, const C b){
    return imag(conj(a)*b);
}

int ccw(C a,C b,C c)
{
    b -= a, c-= a;
    if(cross(b,c)>0) return 1;
    if(cross(b,c)<0) return -1;
    return 0;
}

C crosspointLL(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];
    }
    return m[0] + B / A * (m[1] - m[0]);
}

int main()
{
    int p,q;
    while(cin >> p >> q){
        vector<C> a(3),b(3);
        a[0] = C(p,q);
        rep(i,2){
            cin >> p >> q;
            a[i+1] = C(p,q);
        }
        rep(i,3){
            cin >> p >> q;
            b[i] = C(p,q);
        }
        vector<C> ka = a, kb = b;
        int ans = 10;
        rep(i,3){
            rep(j,3){
                for(int k=1;k<=2;k++){
                    a = ka, b = kb;
                    L l1 = L(a[(i+k)%3],a[(i+k)%3]+a[i]-a[(i+3-k)%3]);
                    L l2 = L(a[(i+3-k)%3],a[(i+3-k)%3]+b[j]-a[i]);
                    auto p1 = crosspointLL(l1,l2);
                    if(i == 2 && j == 2 && k == 2){
                        // cout << a[(i+3-k)%3] << " " << a[(i+3-k)%3]+b[j]-a[i] << "\n";
                    }
                    a[i] = b[j];
                    int minus = 0;
                    if(a[(i+k)%3] == p1){
                        // cout << a[(i+k)%3] << " " << p1 << "\n";
                        // cout << i << " " << j << " " << k << "\n";
                        minus++;
                    }else{
                        a[(i+k)%3] = p1;
                    }
                    if(i == 2 && j == 2 && k == 2){
                        // cout << p1 << "\n";
                        // cout << minus << "\n";
                        // rep(id,3){
                        //     cout << a[id] << " ";
                        // }
                        // cout << "\n";
                        // rep(id,3){
                        //     cout << b[id] << " ";
                        // }
                        // cout << "\n";
                    }
                    vector<C> kka = a, kkb = b;
                    int km = minus;
                    for(int l=1;l<=2;l++){
                        for(int m=1;m<=2;m++){
                            a = kka, b = kkb;
                            minus = km;
                            L l3 = L(a[i],a[i]+a[(i+l)%3]-b[(j+m)%3]);
                            L l4 = L(a[(i+3-l)%3],a[(i+3-l)%3]+a[i]-a[(i+l)%3]);
                            auto p2 = crosspointLL(l3,l4);
                            a[(i+l)%3] = b[(j+m)%3];
                            if(i == 2 && j == 2 && k == 2 && l == 1 && m == 1){
                                // rep(id,3){
                                //     cout << a[id] << " ";
                                // }
                                // cout << "\n";
                                // rep(id,3){
                                //     cout << b[id] << " ";
                                // }
                                // cout << "\n";
                                // cout << a[(i+l)%3] << " " << b[(j+m)%3] << "\n";
                                // cout << a[(i+3-l)%3] << " " << p2 << "\n";
                            }
                            if(a[(i+3-l)%3] == p2){
                                minus++;
                            }else{
                                a[(i+3-l)%3] = p2;
                            }
                            int dir1 = ccw(a[i],a[(i+l)%3],a[(i+3-l)%3]);
                            int dir2 = ccw(a[i],a[(i+l)%3],b[(j+3-m)%3]);
                            minus += (dir1 == dir2);
                            if(6-minus < 5) ans = min(ans,6-minus);
                        }
                    }
                }
            }
        }
        if(ans != 10){
            cout << ans << "\n";
        }else{
            cout << "Many\n";
        }
    }
}



Measured memory_bytes: 3064