def meddling_middlepoint(perm):
    n = len(perm)
    inv = inverse_0(perm)
    neigh = [{perm[(i-1) % n], perm[(i+1) % n]} for i in range(n)]
    for O in range(n):
        val = lambda x : (x - O) % n
        p,q = get_significant_adjacent_points(O,perm,inv,neigh,n,val)
        if val(p) - val(q) == 1:
            val = lambda x : (x - q) % n
            pp,qq = get_significant_adjacent_points(q,perm,inv,neigh,n,val)
            if (qq,pp) == (O, (O+1)%n):
                return True
    return False
def test_star_property(orig):
    from sympy import S
    n = len(orig)
    for i in range(n):
        val = lambda x : (x - i) % n
        perm = [val(x) for x in orig]
        neigh = [{perm[(i-1) % n], perm[(i+1) % n]} for i in range(n)]
        inv = inverse_0(perm)
        q = min(neigh[inv[0]])
        p = max(neigh[inv[1]])
        if not p > q:
            #print(i, "semistar")
            return False
        for r in range(p+1, n):
            sprime = triple_intersection(n,p,q,r)
            #print(sprime)
            s_set = neigh[inv[r]]
            if any(0 < sprime - S(s) and s > 1 for s in s_set):
                #print(i, "star", p,q,r,s_set,float(sprime))
                return False
    return True
def main():
    drawing = True
    starLis = []
    while 1:
        if drawing:
            try:
                line = input()
                lis = line.split(',')
                lis = [int(i) for i in lis]
                UnicursalPolygon(lis).draw(save=True)
            except EOFError:
                break
        else:
            try:
                line = input()
                lis = line.split(',')
                lis = [int(i) for i in lis]
                a = UnicursalPolygon(lis)
                b = UnicursalPolygon(inverse_0(lis))
                try:
                    tmp = a.is_star()
                    tmp2 = b.is_star()
                except:
                    print("b failed is_star()," + str(b.perm))
                    continue
                if tmp and tmp2:
                    print("star: {} inverses into a star {}".format(str(lis),str(b.perm)))
                    starLis.append(a)
                    starLis.append(b)
                elif tmp:
                    print("star: {} does not inverse into a star {}".format(str(lis),str(b.perm)))
                elif tmp2:
                    print("non-star: {} inverses into a star {}".format(str(lis),str(b.perm)))
                else:
                    print(str(lis) + " neither are stars: " + str(unicursalpolygon.inverse_0(lis)))
            except EOFError:
                break

    for perm in starLis:
        perm.draw()
def nova_badness(orig):
    res = []
    n = len(orig)
    for i in range(n):
        val = lambda x : (x - i) % n
        invval = lambda x : (x + i) % n
        perm = [val(x) for x in orig]
        neigh = [{perm[(i-1) % n], perm[(i+1) % n]} for i in range(n)]
        inv = inverse_0(perm)
        q = min(neigh[inv[0]])
        p = max(neigh[inv[1]])
        if not p > q:
            #print(i, "semistar")
            return -1 # not a semistar
        if n-p-1 > 0 and q-2 > 0:
            pass
        tmp = 0
        for r in range(p+1, n):
            lis = [s for s in neigh[inv[r]] if 1 < s and s < q]
            tmp += len(lis)
        res.append(tmp)
    return sum(res),res
def embeddingless_star(orig):
    res = 1
    reslis = []
    n = len(orig)
    for i in range(n):
        val = lambda x : (x - i) % n
        invval = lambda x : (x + i) % n
        perm = [val(x) for x in orig]
        neigh = [{perm[(i-1) % n], perm[(i+1) % n]} for i in range(n)]
        inv = inverse_0(perm)
        q = min(neigh[inv[0]])
        p = max(neigh[inv[1]])
        if not p > q:
            #print(i, "semistar")
            return False
        if n-p-1 > 0 and q-2 > 0:
            reslis.append(i)
            res = 2
        for r in range(p+1, n):
            lis = [s for s in neigh[inv[r]] if 1 < s and s < q]
            if len(lis):
                #print("O:{} I:{} p:{} q:{} r:{} s:{}".format(i, i+1, invval(p), invval(q), invval(r), [invval(_) for _ in lis]))
                return False
    return res
def test_semistar_property(perm):
    n = len(perm)
    inv = inverse_0(perm)
    neigh = [{perm[(i-1) % n], perm[(i+1) % n]} for i in range(n)]
    return all(semistar_property(i, perm, inv, neigh, n) for i in range(n))