在进入传说中的魔法神秘世界之前,你很幸运地得到了一张地图。地图展示了你计划探索的整个区域,包括几个边界复杂的国家。地图绘制得很清晰,但仅用棕褐色墨水绘制;一眼很难辨认出哪个区域属于哪个国家,这可能会让你陷入严重的危险。你决定在进入该区域之前为地图着色。“凡事预则立,”你对自己说。
每个国家拥有一个或多个领土,每个领土呈多边形形状。属于同一个国家的领土可能“接触”也可能不“接触”,即可能存在互不相连的领土。所有属于同一个国家的领土必须被分配相同的颜色。你可以为多个国家分配相同的颜色,但为了避免混淆,彼此“相邻”的两个国家应该被分配不同的颜色。如果两个国家的任何领土共享一段非零长度的边界,则认为这两个国家是“相邻”的。
编写一个程序,找出为地图着色所需的最少颜色数量。
输入格式
输入包含多组地图数据。每组地图数据以一行包含领土总数 $n$ 开头,随后是这些领土的数据。$n$ 是一个不超过 100 的正整数。一个具有 $m$ 个顶点的领土数据格式如下:
String x1 y1 x2 y2 . . . xm ym -1
“String”(一串字母数字字符)给出了它所属的国家名称。国家名称至少包含一个字符,且不超过二十个字符。当一个国家拥有多个领土时,其名称会出现在每个领土的数据中。
其余行表示领土的顶点。顶点数据行包含一对非负整数,表示顶点的 $x$ 和 $y$ 坐标。$x$ 和 $y$ 坐标由单个空格分隔,$y$ 坐标后紧跟换行符。领土的边由相邻两个顶点数据行给出的顶点连接而成,并由最后一个和第一个顶点数据行给出的顶点连接而成。$x$ 和 $y$ 坐标均不超过 1000。最后,一行中的 $-1$ 标记了顶点数据行的结束。顶点数量 $m$ 不超过 100。
你可以假设多边形的轮廓是简单的,即它们不会自交也不会自触。没有两个多边形共享非零面积的区域。地图中的国家数量不超过 10。
最后一组地图数据后跟一行仅包含零的行,标记输入数据的结束。
输出格式
对于每组地图数据,输出一行,包含满足指定条件为地图着色所需的最少颜色数量。
样例
输入 1
6 Blizid 0 0 60 0 60 60 0 60 0 50 50 50 50 10 0 10 -1 Blizid 0 10 10 10 10 50 0 50 -1 Windom 10 10 50 10 40 20 20 20 20 40 10 50 -1 Accent 50 10 50 50 35 50 35 25 -1 Pilot 35 25 35 50 10 50 -1 Blizid 20 20 40 20 20 40 -1 4 A1234567890123456789 0 0 0 100 100 100 100 0 -1 B1234567890123456789 100 100 100 200 200 200 200 100 -1 C1234567890123456789 0 100 100 100 100 200 0 200 -1 D123456789012345678 100 0 100 100 200 100 200 0 -1 0
输出 1
4 2