""" FindPoly. for ACM SoCal 2018/2019 """ import sys from collections import namedtuple LineSeg = namedtuple("LineSeg", "pa,pb") debug = False pset = set() # all the points adj = {} def abend(mess): print(mess) exit(1) def visit(pt): # depth first search edges = adj[pt] mindeg = maxdeg = len(edges) pset.remove(pt) points = 1 lsegs = len(edges) bedges = 0 for p in edges: if p in pset: thismin,thismax,thispoints,thislsegs,thisbedges = visit(p) mindeg = min(mindeg,thismin) maxdeg = max(maxdeg,thismax) points += thispoints lsegs += thislsegs bedges += thisbedges else: bedges += 1 return (mindeg,maxdeg,points,lsegs,bedges) instr = sys.stdin.readline() while instr: tups = instr.split(";") for tup in tups: if not tup.isspace(): exec("lseg = LineSeg(" + tup + ")") pset.add(lseg.pa) pset.add(lseg.pb) if lseg.pa in adj: adj[lseg.pa].append(lseg.pb) else: adj[lseg.pa] = [lseg.pb] if lseg.pb in adj: adj[lseg.pb].append(lseg.pa) else: adj[lseg.pb] = [lseg.pa] instr = sys.stdin.readline() if debug: for p in pset: print(p) for d in adj: print("%s:%s" % (d,adj[d])) figcount = polycount = 0 while len(pset) != 0: pt = pset.pop() # get a arbitrary element pset.add(pt) # but put it back mindeg,maxdeg,points,lsegs,bedges = visit(pt) if debug: print("starting at %s, min:%s max:%s" % (pt,mindeg,maxdeg)) print(" points:%s edges:%s bedges:%s" % (points,lsegs//2,bedges)) figcount += 1 if (mindeg == 2) & (maxdeg == 2): polycount += 1 print("%s %s" % (figcount,polycount))