数据结构的力量——基于Tire Tree实现图片验证码自动识别

        假期闲来无事,于是找出之前做的一个识别图片验证码的小工具来优化一下。之前写过一篇关于这个小工具的介绍————《不用OCR,如何实现图片验证码的自动识别》https://blog.csdn.net/wangleimj88/article/details/125014133?spm=1001.2014.3001.5501时隔近一年,再次看这些当时觉得还可以的代码已经不尽如人意了,比如字符描述字典的保存形式,又或者识别策略算法,甚至对于原始图片处理的封装。既然如今觉得可以做的更好,那就将这些优化的想法付诸实施吧。

位图——BitSet

        首先是用位图代替二维数组来保存字符描述。空间的节省只是用位图代替二维数组所带来的好处之一,且不是最重要的好处。

BitSet bitSet = new BitSet();
for (int i = 0, k = 0; i < 20; i++) {
    for (int j = 0; j < 56; j++, k++) {
        bitSet.set(k, true);
    }
}
System.out.println(ObjectSizeCalculator.getObjectSize(bitSet));

System.out.println(ObjectSizeCalculator.getObjectSize(new boolean[20][56]));


BitSet size: 296

boolean[20][56] size: 1536

        位图所带来的最大好处是为待识别图片与字符描述字典的比较提供了相当大的便利。来对比一下前后的差异。

优化前:

    private float calculateSimilarity(CharRange charRange, Map.Entry<Dictionary.CharImage, Character> candidateChar) {
        float bingo = 0;
        for (int y = 0; y < candidateChar.getKey().height(); y++) {
            for (int x = 0; x < candidateChar.getKey().width(); x++) {
                if (candidateChar.getKey().get(x, y).equals(processedImage.get((x + charRange.startX) + "-" + (y + charRange.startY)))) {
                    bingo++;
                }
            }
        }
        return bingo / (candidateChar.getKey().height() * candidateChar.getKey().width());
    }

优化后:

    private float calculateSimilarity(ProcessedImage cutImage, Dictionary.CharDescription charDescription) {
        BitSet charDesc = charDescription.getCharPixels();
        int pixelCount = charDesc.length();
        charDesc.xor(cutImage.getProcessedPixelImage());
        return (pixelCount - charDesc.cardinality()) / (float) pixelCount;
    }

        通过位图,仅需一个异或便可计算待识别图片与字典的相似度,省去了原来的O(n2)的操作,还有一点需要提及的是,有时对于二维数组的处理需要跨行访问,也就是以(1,0),(2,0),(3,0)这样的方式来访问数组,而这样访问数组的方式对于CPU cache是不友好的,而位图则刚好又解决了这个问题,可以说是一石多鸟。

升级识别算法

        原来采用的是对图片的字符进行切分后与字符描述字典的数据进行匹配,对于无法切分的图片,也就是切分后一个图片中仍有两个以上字符的情况会启用逐个与字典字符进行匹配的方式进行识别,虽说有效,但还是会有一些漏网之鱼,为了将这些漏网的也悉数识别出来,就需要升级下比较算法,或也可以称为识别策略。

        在软件开发的过程中最难的一项工作之一就是命名,小到一个变量,大到一个工程。为了给新编写的识别算法起个响亮的名字,经一番搜肠刮肚的思考,终于想到了一个既贴切又有历史继承感的名字——"动态滑动窗口算法"。这里的窗口指的是字典中的描述字符,之所以加“动态”两字并不是为了显示高级,而是这个窗口的大小是由字符描述的长度和宽度决定的。在进行比较时是以一个像素为单位,不断移动窗口,直至整个图片与字典中的所有字符描述对比完毕,最后将相似度最高且超过阈值的字符作为识别结果返回。由于"动态滑动窗口算法"这种基于字符描述字典进行匹配的策略,因此也就不再需要像之前的识别算法那样,必须先对图片进行切分后再进行识别,从而省去了图片切分的步骤,这在一定程度上使整体识别的性能有所提升。

用Tire树组织字符描述字典

        用tire树来保存字符描述字典是在优化的过程中突然想到的,因为tire树适用于有公共前缀的字符的查找,而如果将字符描述字典中的字符以坐标的形式来保存,则会有大量前缀是相同的,像下面这样。

lj-2.txt->	[(0,0), (0,1), (0,10), (0,11), (0,12), (1,0), (1,1), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (1,11), (1,12), (2,0), (2,1), (2,3), (2,4), (2,5), (2,6), (2,7), (2,8), (2,9), (2,10), (2,11), (2,12)]
lb-2.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,10), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,7), (1,8), (1,9), (1,10), (2,0), (3,0), (3,1), (3,6), (3,7), (4,0), (4,1), (4,6), (4,7), (5,0), (5,1), (5,5), (5,7), (6,0), (6,1), (6,3), (6,4), (6,5), (7,0), (7,1)]
uE-1.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (2,4), (2,5), (2,9), (2,10), (3,0), (3,1), (3,4), (3,5), (3,9), (3,10), (4,0), (4,1), (4,4), (4,5), (4,9), (4,10), (5,0), (5,1), (5,4), (5,5), (5,9), (5,10), (6,0), (6,1), (6,4), (6,5), (6,9), (6,10), (7,0), (7,1), (7,4), (7,5), (7,9), (7,10)]
uE.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (2,4), (2,5), (2,9), (2,10), (3,0), (3,1), (3,4), (3,5), (3,9), (3,10), (4,0), (4,1), (4,4), (4,5), (4,9), (4,10), (5,0), (5,1), (5,4), (5,5), (5,9), (5,10), (6,0), (6,1), (6,4), (6,5), (6,9), (6,10)]
uF-1.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (2,4), (2,5), (3,0), (3,1), (3,4), (3,5), (4,0), (4,1), (4,4), (4,5), (5,0), (5,1), (5,4), (5,5), (6,0), (6,1)]
uP.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (2,5), (2,6), (3,0), (3,1), (3,5), (3,6), (4,0), (4,1), (4,5), (4,6), (5,0), (5,1), (5,5), (5,6), (6,0), (6,1), (6,2), (6,3), (6,4), (6,5), (6,6), (7,0), (7,1), (7,2), (7,3), (7,4)]
lb.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (2,6), (2,7), (3,0), (3,1), (3,6), (3,7), (4,0), (4,1), (4,6), (4,7), (5,0), (5,1), (5,2), (5,5), (5,6), (5,7), (6,0), (6,1), (6,2), (6,3), (6,4), (6,5), (7,0), (7,1)]
uH.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (3,0), (3,1), (4,0), (4,1), (5,0), (5,1), (6,0), (6,1), (7,0), (7,1), (7,2), (7,3), (7,4), (7,5), (7,6), (7,7), (7,8), (7,9), (7,10), (8,0), (8,1), (8,2), (8,3), (8,4), (8,5), (8,6), (8,7), (8,8), (8,9), (8,10)]
uL.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (3,0), (3,1), (4,0), (4,1), (5,0), (5,1), (6,0), (6,1), (7,0), (7,1)]
uL-1.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (3,0), (3,1), (4,0), (4,1), (5,0), (5,1)]
lk-1.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,2), (3,0), (3,1), (3,2), (4,0), (4,1), (4,2), (4,4), (4,5), (4,6), (5,0), (5,1), (5,5), (5,6), (5,7), (6,0), (6,7)]
lb-1.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,4), (2,5), (3,0), (3,1), (3,6), (3,7), (4,0), (4,1), (4,6), (4,7), (5,0), (5,1), (5,2), (5,5), (5,6), (5,7), (6,0), (6,1), (6,2), (6,3), (6,4), (6,5)]
ll.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10)]
lh-1.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,1), (1,2), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (3,0), (3,1), (4,0), (4,1), (5,0), (5,1), (5,2), (5,5), (5,6), (6,0), (6,1), (6,2), (6,3), (6,4), (6,5), (6,6)]
uN.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,1), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (2,2), (2,3), (3,0), (3,1), (3,2), (3,3), (4,0), (4,2), (4,3), (5,0), (5,1), (6,0), (6,1), (6,2), (7,0), (7,1), (7,2), (7,5), (7,6), (7,7), (7,9), (7,10), (8,0), (8,1), (8,2), (8,3), (8,4), (8,5), (8,6), (8,7), (8,8), (8,9), (8,10)]
uF-2.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,1), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (2,4), (2,5), (3,0), (3,1), (3,4), (3,5), (4,0), (4,1), (4,4), (4,5), (5,0), (5,1), (5,4), (5,5), (6,0), (6,1), (6,4), (6,5)]
uF.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,4), (2,5), (3,0), (3,5), (4,0), (4,4), (5,0), (5,1), (5,4), (5,5), (6,0), (6,1), (6,4), (6,5)]
lh.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (3,0), (3,1), (4,0), (4,1), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,6), (5,7), (6,0), (6,1), (6,2), (6,3), (6,4), (6,5), (6,6)]
uR.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,3), (1,4), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (3,0), (3,1), (3,5), (4,0), (4,1), (4,5), (4,6), (5,0), (5,1), (5,5), (5,7), (6,0), (6,1), (6,5), (6,6), (6,7), (6,8), (6,9), (7,0), (7,1), (7,2), (7,3), (7,4), (7,7), (7,8), (7,9), (8,0), (8,1), (8,2), (8,7), (8,8)]
lp.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,5), (3,0), (3,1), (3,6), (3,7), (4,0), (4,1), (4,6), (4,7), (5,0), (5,1), (5,2), (5,6), (5,7), (6,0), (6,1), (6,2), (6,3), (6,4), (6,5), (7,0), (7,1)]
uD.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (1,0), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (2,9), (2,10), (3,0), (3,1), (3,9), (3,10), (4,0), (4,1), (4,9), (4,10), (5,0), (5,1), (5,9), (5,10), (6,0), (6,7), (6,8), (6,9), (7,0), (7,1), (7,3), (7,4), (7,5), (7,6), (7,7), (7,8), (8,0), (8,1), (8,2), (8,3), (8,4), (8,5)]
uU-1.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (2,2), (3,0), (3,1), (4,0), (4,1), (5,0), (5,1), (6,0), (6,1), (6,2), (7,0), (7,1), (7,2), (7,3), (7,4), (7,5), (7,6), (7,7), (7,8), (7,9), (8,0), (8,1), (8,2), (8,3), (8,4), (8,5), (8,6), (8,7), (8,8)]
uU.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (2,0), (2,1), (2,2), (3,0), (3,1), (4,0), (4,1), (5,0), (5,1), (6,0), (6,1), (6,2), (7,0), (7,1), (7,2), (7,3), (7,4), (7,5), (7,6), (7,7), (7,8), (7,9), (8,0), (8,1), (8,2), (8,3), (8,4), (8,5), (8,6), (8,7)]
lr.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (2,0), (2,1), (2,2), (3,0), (3,1), (4,0), (4,1)]
00.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (1,0), (1,1), (1,2), (1,3), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (2,9), (2,10), (3,0), (3,1), (3,9), (3,10), (4,0), (4,1), (4,2), (4,9), (4,10), (5,0), (5,1), (5,2), (5,3), (5,5), (5,6), (5,7), (5,8), (6,0), (6,1), (6,2)]
lm.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (1,0), (1,1), (1,3), (1,4), (1,5), (1,6), (2,0), (3,0), (3,1), (4,0), (4,1), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,6), (6,0), (6,1), (6,3), (7,0), (8,0), (9,0), (9,1), (9,2), (10,0), (10,1), (10,2), (10,3), (10,4), (10,5), (10,6)]
uC.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (2,0), (2,1), (2,2), (2,8), (2,9), (2,10), (3,0), (3,1), (3,9), (3,10), (4,0), (4,1), (4,9), (4,10), (5,0), (5,1), (5,9), (5,10), (6,0), (6,1), (6,2), (6,8), (6,9), (6,10), (7,0), (7,1), (7,2), (7,6), (7,7), (7,8)]
lu.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (2,0), (2,1), (3,0), (3,1), (4,0), (4,1), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,6), (5,7), (6,0), (6,1), (6,2), (6,3), (6,4), (6,5), (6,6), (6,7)]
ln.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (2,0), (3,0), (3,1), (4,0), (4,1), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,6), (5,7)]
uG-1.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (2,0), (2,1), (2,7), (2,8), (3,0), (3,1), (3,9), (3,10), (4,0), (4,1), (4,5), (4,9), (4,10), (5,0), (5,1), (5,5), (5,6), (5,9), (5,10), (6,0), (6,1), (6,5), (6,6), (6,9), (6,10), (7,0), (7,1), (7,4), (7,5), (7,7), (7,8), (7,9), (8,0), (8,1), (8,4), (8,5), (8,6), (8,7), (8,8), (9,0), (9,1), (9,2), (9,3)]
06-1.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (1,0), (1,1), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (2,0), (2,1), (2,4), (2,5), (2,9), (2,10), (3,0), (3,1), (3,4), (3,5), (3,9), (3,10), (4,0), (4,1), (4,2), (4,4), (4,5), (4,6), (4,8), (4,9), (4,10), (5,0), (5,1), (5,4), (5,6), (5,7), (6,0), (6,1), (6,2)]
06.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (1,0), (1,1), (1,4), (1,5), (1,7), (1,8), (2,0), (2,1), (2,5), (2,9), (2,10), (3,0), (3,4), (3,5), (3,9), (3,10), (4,0), (4,1), (4,2), (4,4), (4,5), (4,9), (4,10), (5,0), (5,1), (5,4), (5,5), (5,6), (5,7), (5,8)]
uD-1.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,7), (0,8), (0,9), (0,10), (1,0), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,9), (1,10), (2,0), (2,8), (2,9), (3,0), (3,1), (3,9), (3,10), (4,0), (4,1), (4,9), (4,10), (5,0), (5,1), (5,9), (5,10), (6,0), (6,1), (6,2), (6,8), (6,10), (7,0), (7,1), (7,2), (7,3), (7,4), (7,5), (7,6), (7,7), (7,8), (8,0), (8,1), (8,2), (8,3), (8,4), (8,5)]
uG.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (2,0), (2,7), (2,8), (3,0), (3,1), (3,9), (3,10), (4,0), (4,1), (4,9), (4,10), (5,0), (5,1), (5,5), (5,6), (5,9), (5,10), (6,0), (6,1), (6,5), (6,6), (6,9), (6,10), (7,0), (7,1), (7,2), (7,5), (7,6), (7,8), (7,9), (7,10), (8,0), (8,1), (8,2), (8,4), (8,5), (8,6), (8,7), (8,8), (9,0), (9,3), (9,4), (9,5), (9,6)]
lq-1.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (2,0), (2,1), (2,6), (2,7), (3,0), (3,1), (3,6), (3,7), (4,0), (4,5), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,6), (5,7), (5,8), (6,0), (6,1), (6,2), (6,3), (6,4), (6,5), (6,6), (6,7), (6,8)]
uQ-1.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (2,0), (2,1), (2,8), (3,0), (3,1), (3,9), (3,10), (4,0), (4,1), (4,9), (4,10), (5,0), (5,1), (5,7), (5,8), (5,9), (5,10), (6,0), (6,1), (6,8), (6,10), (7,0), (7,1), (7,7), (7,8), (7,9), (7,10), (8,0), (8,1), (8,2), (8,3), (8,4), (8,5), (8,6), (8,7), (8,8), (9,0), (9,1), (9,2), (9,3), (9,4), (9,8)]
le-1.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (1,0), (1,1), (1,2), (1,3), (1,4), (1,6), (1,7), (2,0), (2,1), (2,3), (2,4), (2,6), (2,7), (3,0), (3,1), (3,3), (3,4), (3,6), (3,7), (4,0), (4,1), (4,3), (4,4), (4,6), (4,7)]
uK-2.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (2,0), (2,1), (3,0), (3,1), (4,0), (4,1), (4,2), (5,0), (5,1), (5,3), (5,4), (5,5), (6,0), (6,2), (6,7), (6,8), (6,9), (7,0), (7,1), (7,8), (7,9), (7,10), (8,0), (8,9), (8,10)]
09-1.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,7), (0,8), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,8), (1,9), (1,10), (2,0), (2,1), (2,5), (2,6), (2,9), (2,10), (3,0), (3,1), (3,5), (3,6), (3,9), (3,10), (4,0), (4,1), (4,2), (4,5), (4,6), (4,7), (4,8), (4,9), (4,10), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,6), (5,7), (5,8), (6,0), (6,1)]
09.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,7), (0,8), (1,0), (1,1), (1,2), (1,4), (1,5), (1,6), (1,8), (1,9), (1,10), (2,0), (2,1), (2,5), (2,6), (2,9), (2,10), (3,0), (3,1), (3,5), (3,6), (3,9), (3,10), (4,0), (4,1), (4,2), (4,5), (4,6), (4,8), (4,9), (4,10), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,6), (5,7), (5,8), (6,0), (6,1), (6,2), (6,3), (6,4)]
lg.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (0,7), (0,8), (1,0), (1,1), (1,2), (1,5), (1,6), (1,8), (1,9), (1,10), (2,0), (2,1), (2,6), (2,7), (2,9), (2,10), (3,0), (3,1), (3,6), (3,7), (3,9), (3,10), (4,0), (4,5), (4,8), (4,9), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,6), (5,7), (5,8), (5,9), (6,0), (6,1), (6,2), (6,3), (6,4), (6,5), (6,6), (6,7), (6,8), (6,9)]
le-2.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (1,0), (1,1), (1,4), (1,5), (1,6), (1,7), (2,0), (2,1), (2,3), (2,4), (2,6), (2,7), (3,0), (3,1), (3,3), (3,4), (3,6), (3,7), (4,0), (4,3), (4,4), (4,6), (5,0), (5,1), (5,3), (5,5), (6,0)]
ld-2.txt->	[(0,0), (0,1), (0,2), (0,3), (0,4), (1,0), (1,1), (1,4), (1,5), (1,6), (2,0), (2,5), (2,6), (3,0), (3,5), (3,6), (4,0), (4,5), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,6), (5,7), (5,8), (5,9), (5,10), (6,0), (6,1), (6,2), (6,3), (6,4), (6,5), (6,6), (6,7), (6,8), (6,9), (6,10)]
uK.txt->	[(0,0), (0,1), (0,2), (0,3), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (3,0), (3,1), (4,0), (4,1), (4,2), (5,0), (5,1), (5,3), (5,4), (5,5), (6,0), (6,1), (6,2), (6,7), (6,8), (6,9), (7,0), (7,1), (7,8), (7,9), (7,10), (8,0), (8,9), (8,10)]
uB.txt->	[(0,0), (0,1), (0,2), (0,3), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,1), (1,2), (1,3), (1,4), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (2,4), (2,5), (2,9), (2,10), (3,0), (3,1), (3,4), (3,5), (3,9), (3,10), (4,0), (4,1), (4,4), (4,5), (4,9), (4,10), (5,0), (5,4), (5,5), (5,9), (5,10), (6,0), (6,1), (6,4), (6,5), (6,9), (6,10), (7,0), (7,1), (7,2), (7,3), (7,4), (7,5), (7,7), (7,8), (8,0), (8,1), (8,2)]
uW-2.txt->	[(0,0), (0,1), (0,2), (0,3), (0,5), (1,0), (1,1), (1,2), (1,3), (1,5), (2,0), (2,1), (2,2), (3,0), (3,1), (3,2), (4,0), (4,1), (4,2), (4,3), (5,0), (5,1), (5,2), (6,0), (6,1), (6,2), (6,3), (7,0), (7,1), (7,2), (7,3), (7,4), (8,0), (8,1), (8,2), (8,3), (8,4), (9,0), (9,1), (9,2), (9,3), (10,0), (10,1), (10,2), (10,3), (10,4), (10,5), (10,6), (11,0), (11,1), (11,2), (11,3), (11,4), (11,5), (12,0), (12,1)]
ld-1.txt->	[(0,0), (0,1), (0,2), (0,3), (0,5), (1,0), (1,1), (1,2), (1,5), (1,6), (1,7), (2,0), (2,1), (2,6), (2,7), (3,0), (3,1), (3,6), (3,7), (4,0), (4,5), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,8), (5,9), (6,0), (6,1), (6,2), (6,3), (6,4), (6,5), (6,6), (6,7), (6,8), (6,9), (6,10)]
ls-1.txt->	[(0,0), (0,1), (0,2), (0,3), (0,6), (0,7), (1,0), (1,1), (1,3), (1,4), (1,6), (1,7), (2,0), (2,1), (2,3), (2,4), (2,6), (2,7), (3,0), (3,1), (3,3), (3,4), (3,6), (3,7)]
lc.txt->	[(0,0), (0,1), (0,2), (0,3), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (2,0), (2,1), (2,6), (2,7), (3,0), (3,1), (3,6), (3,7), (4,0), (4,1), (4,6), (4,7), (5,0), (5,1), (5,4), (5,5), (6,0)]
lq.txt->	[(0,0), (0,1), (0,2), (0,3), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (2,0), (2,1), (2,7), (3,0), (3,1), (3,6), (3,7), (4,0), (4,5), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,8), (5,9), (6,0), (6,1), (6,2), (6,3), (6,4), (6,5), (6,6), (6,7), (6,9), (6,10)]
ly.txt->	[(0,0), (0,1), (0,2), (0,3), (1,0), (1,1), (1,2), (1,3), (1,4), (2,0), (2,1), (2,2), (2,3), (2,4), (2,5), (3,0), (3,1), (3,2), (3,3), (3,4), (4,0), (4,1), (4,2), (4,3), (4,4), (4,5), (5,0), (5,1), (5,2), (5,3), (5,4)]
04-1.txt->	[(0,0), (0,1), (0,2), (0,3), (1,0), (1,1), (1,2), (1,3), (1,4), (2,0), (2,1), (2,2), (2,3), (2,6), (2,7), (3,0), (3,1), (3,2), (3,3), (3,4), (3,7), (3,8), (4,0), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6), (4,7), (4,8), (4,9), (4,10)]
lw.txt->	[(0,0), (0,1), (0,2), (0,3), (1,0), (1,1), (1,2), (1,3), (1,4), (2,0), (2,1), (3,0), (3,1), (3,2), (4,0), (4,1), (4,3), (5,0), (5,1), (5,2), (6,0), (6,1), (6,2), (6,3), (7,0), (7,6), (7,7), (8,0), (8,1), (8,2), (8,3), (8,4), (9,0), (9,1), (9,2), (9,3), (9,4), (10,0), (10,1)]
uY.txt->	[(0,0), (0,1), (0,2), (0,3), (1,0), (1,1), (1,2), (2,0), (2,1), (2,2), (2,3), (2,4), (2,5), (2,6), (3,0), (3,1), (3,2), (3,3), (3,4), (3,5), (3,6), (4,0), (4,2), (4,3), (5,0), (5,1), (5,2), (6,0), (6,1)]
lc-1.txt->	[(0,0), (0,1), (0,2), (0,3), (1,0), (1,1), (1,4), (2,0), (2,1), (2,6), (2,7), (3,0), (3,1), (3,6), (3,7), (4,0), (4,1), (4,6), (4,7), (5,0), (5,1), (5,4), (5,5), (5,6), (6,0), (6,3)]
lw-1.txt->	[(0,0), (0,1), (0,2), (0,3), (1,0), (1,2), (1,3), (1,4), (1,5), (1,6), (2,0), (2,1), (2,2), (3,0), (3,1), (3,3), (4,0), (4,1), (4,2), (4,3), (4,4), (5,0), (5,1), (5,2), (5,3), (6,0), (6,1), (6,2), (6,3), (6,4), (6,5), (6,6), (6,7), (7,0), (7,2), (8,0), (8,1), (8,2), (8,3), (9,0), (9,1), (9,2), (9,3), (10,0), (10,1)]
le.txt->	[(0,0), (0,1), (0,2), (0,3), (1,0), (1,6), (1,7), (2,0), (2,1), (2,3), (2,4), (2,6), (2,7), (3,0), (3,1), (3,3), (3,4), (3,6), (3,7), (4,0), (4,1), (4,3), (4,4), (4,6), (4,7), (5,0), (5,1), (5,2), (5,3), (5,5), (6,0), (6,1)]
uM-1.txt->	[(0,0), (0,1), (0,2), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (1,0), (1,2), (1,4), (1,5), (1,7), (1,8), (2,0), (2,1), (3,0), (3,1), (3,2), (3,3), (3,4), (4,0), (4,3), (5,0), (5,3), (6,0), (6,1), (6,2), (6,3), (7,0), (7,1), (8,0), (8,1), (9,0), (9,1), (9,2), (9,3), (9,4), (9,5), (9,6), (9,7), (9,8), (9,9), (9,10)]
uK-1.txt->	[(0,0), (0,1), (0,2), (0,4), (0,5), (0,6), (0,7), (0,9), (0,10), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (3,0), (4,0), (4,1), (4,2), (5,0), (5,1), (5,4), (5,5), (5,6), (6,0), (6,1), (6,2), (6,6), (6,7), (6,8), (6,9), (7,0), (7,1), (7,8), (7,9), (8,0), (8,9), (8,10)]
uR-1.txt->	[(0,0), (0,1), (0,2), (0,4), (0,6), (0,8), (0,9), (0,10), (1,0), (1,1), (1,2), (1,3), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (2,5), (2,6), (3,0), (3,1), (3,5), (3,6), (4,0), (4,1), (4,5), (4,6), (5,0), (5,1), (5,5), (5,6), (5,7), (6,0), (6,4), (6,5), (6,6), (6,7), (6,8), (7,0), (7,1), (7,2), (7,3), (7,4), (7,7), (7,8), (7,9), (8,0), (8,1), (8,2), (8,7), (8,8)]
08-1.txt->	[(0,0), (0,1), (0,2), (0,5), (0,6), (0,7), (0,8), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (2,4), (2,5), (2,9), (2,10), (3,0), (3,1), (3,4), (3,5), (3,9), (3,10), (4,0), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6), (4,7), (4,8), (4,9), (4,10), (5,0), (5,1), (5,2), (5,4), (5,5), (5,6), (5,7), (5,8)]
08.txt->	[(0,0), (0,1), (0,2), (0,5), (0,6), (0,7), (0,8), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (2,4), (2,5), (2,9), (2,10), (3,0), (3,1), (3,4), (3,5), (3,9), (3,10), (4,0), (4,1), (4,2), (4,3), (4,4), (4,5), (4,8), (4,9), (4,10), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,6), (5,7), (5,8), (6,0), (6,1), (6,4), (6,5), (6,6)]
uM.txt->	[(0,0), (0,1), (0,2), (0,5), (0,6), (0,8), (0,9), (0,10), (1,0), (1,1), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (2,2), (3,0), (3,1), (3,2), (3,3), (3,4), (3,5), (4,0), (4,1), (4,2), (4,4), (4,5), (5,0), (5,1), (5,2), (5,3), (6,0), (6,1), (6,2), (6,3), (6,4), (6,5), (7,0), (7,1), (7,2), (7,3), (7,4), (7,5), (8,0), (8,1), (9,0), (9,1), (9,2), (9,3), (9,4), (9,5), (9,6), (9,8), (9,9), (9,10), (10,0), (10,1), (10,2), (10,3), (10,4)]
uS.txt->	[(0,0), (0,1), (0,2), (0,6), (0,7), (1,0), (1,1), (1,2), (1,3), (1,4), (1,7), (1,8), (2,0), (2,1), (2,4), (2,5), (2,9), (2,10), (3,0), (3,1), (3,4), (3,5), (3,6), (3,9), (3,10), (4,0), (4,1), (4,5), (4,6), (4,9), (4,10), (5,0), (5,1), (5,4), (5,5), (5,6), (5,7), (5,8), (5,9), (6,0), (6,4), (6,5), (6,6), (6,7)]
lv.txt->	[(0,0), (0,1), (0,2), (1,0), (1,1), (1,2), (1,3), (1,4), (2,0), (2,1), (3,0), (3,1), (3,2), (4,0), (4,2), (4,3), (4,4), (5,0), (5,1), (5,2), (5,4), (6,0)]
lw-2.txt->	[(0,0), (0,1), (0,2), (1,0), (1,1), (1,2), (1,3), (1,5), (2,0), (2,1), (2,2), (3,0), (3,1), (3,2), (3,3), (4,0), (4,1), (4,2), (5,0), (5,1), (6,0), (6,1), (6,2), (6,3), (6,4), (7,0), (7,1), (7,2), (8,0), (8,1), (8,2), (8,3), (8,4), (9,0), (9,1), (9,2), (9,3), (9,4), (10,0), (10,1)]
uA-2.txt->	[(0,0), (0,1), (0,2), (1,0), (1,1), (1,2), (1,3), (2,0), (2,1), (2,2), (2,3), (2,4), (2,5), (3,0), (3,1), (3,5), (3,6), (4,0), (4,1), (4,6), (4,7), (5,0), (5,1), (5,2), (5,3), (5,6), (5,7), (6,0), (6,1), (6,2), (6,3), (7,0), (7,1), (7,2), (7,3), (7,4)]
04.txt->	[(0,0), (0,1), (0,2), (1,0), (1,1), (1,2), (1,3), (2,0), (2,1), (2,3), (2,4), (3,0), (3,1), (3,5), (4,0), (4,1), (4,2), (4,6), (4,7), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,6), (5,7), (5,8), (5,9), (5,10), (6,0), (6,1), (6,2), (6,3), (6,4), (6,5), (6,6), (6,7), (6,8), (6,9), (6,10)]
uA.txt->	[(0,0), (0,1), (0,2), (1,0), (1,1), (1,2), (1,4), (2,0), (2,1), (2,2), (2,3), (2,4), (2,5), (3,0), (3,1), (3,2), (3,3), (3,7), (4,0), (4,1), (4,6), (4,7), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,7), (6,0), (6,1), (6,2), (6,3), (6,4), (7,0), (7,1), (7,2), (7,3), (7,4), (8,0), (8,1), (8,2)]
ld.txt->	[(0,0), (0,1), (0,2), (1,0), (1,1), (1,2), (1,5), (1,6), (1,7), (2,0), (2,1), (2,6), (2,7), (3,0), (3,1), (3,6), (3,7), (4,0), (4,5), (4,6), (5,0), (5,1), (5,2), (5,4), (5,5), (5,6), (5,7), (5,8), (5,9), (5,10), (6,0), (6,1), (6,2), (6,3), (6,4), (6,5), (6,6), (6,7), (6,8), (6,9), (6,10)]
uJ-1.txt->	[(0,0), (0,1), (0,2), (1,0), (1,1), (2,0), (2,1), (3,0), (3,1), (4,0), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6), (4,7), (4,8), (4,9), (4,10), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,6), (5,7), (5,8), (5,9)]
lj-1.txt->	[(0,0), (0,1), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (0,11), (0,12), (1,0), (1,1), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (1,11), (1,12)]
lk.txt->	[(0,0), (0,1), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (0,10), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (3,0), (3,1), (3,2), (3,3), (4,0), (4,1), (4,2), (4,3), (4,4), (4,5), (5,0), (5,1), (5,5), (5,6), (5,7), (6,0), (6,7)]
lg-1.txt->	[(0,0), (0,1), (0,3), (0,4), (0,5), (0,7), (0,8), (1,0), (1,1), (1,2), (1,3), (1,5), (1,6), (1,8), (2,0), (2,1), (2,6), (2,7), (2,9), (3,0), (3,1), (3,6), (3,7), (3,9), (3,10), (4,0), (4,5), (4,8), (4,9), (5,0), (5,2), (5,7), (5,8), (5,9), (5,10), (6,0), (6,1), (6,2), (6,4), (6,5), (6,6), (6,7), (6,8), (6,9)]
lz-1.txt->	[(0,0), (0,1), (0,5), (0,6), (0,7), (1,0), (1,1), (1,4), (1,5), (1,6), (1,7), (2,0), (2,1), (2,3), (2,4), (2,6), (2,7), (3,0), (3,1), (3,2), (3,3), (3,4), (3,6), (3,7), (4,0), (4,1), (4,2), (4,6), (4,7), (5,0), (5,1), (5,6), (5,7)]
lz.txt->	[(0,0), (0,1), (0,5), (0,6), (0,7), (1,0), (1,1), (1,4), (1,5), (1,6), (1,7), (2,0), (2,4), (2,6), (2,7), (3,0), (3,3), (3,6), (3,7), (4,0), (4,3), (4,6), (4,7), (5,0), (5,1), (5,2), (5,6), (5,7)]
ls-2.txt->	[(0,0), (0,1), (0,5), (0,6), (1,0), (1,1), (1,2), (1,3), (1,6), (1,7), (2,0), (2,1), (2,2), (2,3), (2,4), (2,6), (2,7), (3,0), (3,1), (3,3), (3,4), (3,6), (3,7), (4,0), (4,1), (4,3), (4,4), (4,5), (4,6), (4,7), (5,0), (5,1), (5,4), (5,5), (5,6)]
lx-1.txt->	[(0,0), (0,1), (0,6), (0,7), (1,0), (1,1), (1,2), (1,5), (1,6), (1,7), (2,0), (2,1), (2,2), (2,3), (2,4), (3,0), (3,1), (3,2), (3,3), (4,0), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6), (5,0), (5,1), (5,5), (5,6), (5,7)]
lx.txt->	[(0,0), (0,1), (0,6), (0,7), (1,0), (1,1), (1,2), (1,5), (1,6), (1,7), (2,0), (2,1), (2,2), (2,3), (3,0), (3,1), (3,2), (3,3), (4,0), (4,1), (4,2), (4,4), (4,5), (4,6), (5,0), (5,1), (5,6), (5,7), (6,0), (6,1), (6,7)]
02-1.txt->	[(0,0), (0,1), (0,7), (0,8), (1,0), (1,1), (1,2), (1,6), (1,7), (1,8), (1,9), (2,0), (2,1), (2,7), (2,8), (2,9), (2,10), (3,0), (3,1), (3,5), (3,6), (3,7), (3,8), (3,9), (3,10), (4,0), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6), (4,9), (4,10), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,8), (5,9), (6,0), (6,1), (6,2), (6,8), (6,9)]
02-2.txt->	[(0,0), (0,1), (0,7), (0,8), (1,0), (1,1), (1,2), (1,6), (1,7), (1,8), (1,9), (2,0), (2,1), (2,7), (2,8), (2,9), (2,10), (3,0), (3,1), (3,5), (3,6), (3,7), (3,8), (3,9), (3,10), (4,0), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6), (4,9), (4,10)]
02-3.txt->	[(0,0), (0,1), (0,7), (0,8), (1,0), (1,1), (1,2), (1,7), (1,8), (1,9), (2,0), (2,1), (2,7), (2,8), (2,9), (2,10), (3,0), (3,1), (3,7), (3,8), (3,9), (3,10), (4,0), (4,1), (4,5), (4,6), (4,9), (4,10)]
02.txt->	[(0,0), (0,1), (0,7), (0,8), (1,0), (1,2), (1,7), (1,8), (1,9), (2,0), (2,1), (2,7), (2,9), (2,10), (3,0), (3,1), (3,6), (3,7), (3,9), (3,10), (4,0), (4,5), (4,6), (4,9), (5,0), (5,1), (5,2), (5,3), (5,9)]
uZ-1.txt->	[(0,0), (0,1), (0,8), (0,9), (0,10), (1,0), (1,1), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (2,5), (2,6), (2,7), (2,9), (2,10), (3,0), (3,1), (3,4), (3,5), (3,6), (3,9), (3,10), (4,0), (4,1), (4,3), (4,4), (4,5), (4,9), (4,10), (5,0), (5,1), (5,2), (5,3), (5,4), (5,9), (5,10), (6,0), (6,1), (6,2), (6,9), (6,10), (7,0), (7,1), (7,9), (7,10)]
uZ.txt->	[(0,0), (0,1), (0,8), (0,9), (0,10), (1,0), (1,1), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (2,5), (2,6), (2,7), (2,9), (2,10), (3,0), (3,1), (3,4), (3,5), (3,6), (3,9), (3,10), (4,0), (4,1), (4,3), (4,4), (4,5), (4,9), (4,10), (5,0), (5,1), (5,2), (5,3), (5,4), (5,9), (5,10), (6,0), (6,1), (6,2), (6,3), (6,9), (6,10)]
uX-1.txt->	[(0,0), (0,1), (0,9), (0,10), (1,0), (1,1), (1,2), (1,7), (1,8), (1,9), (1,10), (2,0), (2,3), (2,5), (3,0), (3,1), (4,0), (4,1), (4,2), (5,0), (5,1), (5,2), (5,5), (5,6), (5,7), (5,8), (6,0), (6,1), (6,6), (6,7), (6,8), (6,9), (7,0), (7,9), (7,10), (8,0), (8,10)]
uX.txt->	[(0,0), (0,1), (0,9), (0,10), (1,0), (1,1), (1,2), (1,8), (1,9), (1,10), (2,0), (2,1), (2,2), (2,5), (2,6), (2,7), (3,0), (3,1), (3,3), (3,4), (4,0), (4,1), (4,2), (4,3), (4,4), (5,0), (5,1), (5,2), (5,3), (5,5), (5,6), (5,7), (6,0), (6,1), (6,2), (6,8), (6,9), (6,10), (7,0), (7,9), (7,10), (8,0)]
uZ-2.txt->	[(0,0), (0,1), (0,9), (0,10), (1,0), (1,1), (1,8), (1,9), (1,10), (2,0), (2,1), (2,6), (2,7), (2,8), (2,9), (2,10), (3,0), (3,1), (3,5), (3,6), (3,7), (3,9), (3,10), (4,0), (4,1), (4,4), (4,5), (4,6), (4,9), (4,10), (5,0), (5,1), (5,3), (5,5), (5,9), (5,10), (6,0), (6,1), (6,2), (6,3), (6,4), (6,9), (6,10), (7,0), (7,1), (7,2), (7,9), (7,10), (8,0), (8,1), (8,9), (8,10)]
lf-3.txt->	[(0,0), (0,1), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (2,0), (2,1), (2,2), (2,3), (2,4), (2,5), (2,6), (2,7), (2,8), (2,9), (2,10), (3,0), (3,1), (3,3), (3,4), (4,0), (4,1)]
lf.txt->	[(0,0), (0,1), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (2,0), (2,1), (2,2), (2,3), (2,4), (2,5), (2,6), (2,7), (2,8), (2,9), (2,10), (3,0), (3,1), (3,2), (3,3), (3,4), (3,8), (4,0), (4,1), (4,3), (4,4)]
lt.txt->	[(0,0), (0,1), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (2,0), (2,1), (2,2), (2,6), (2,8), (3,0), (3,1), (3,6), (3,7), (4,0), (4,1), (4,6)]
ls.txt->	[(0,0), (0,1), (1,0), (1,1), (1,2), (1,3), (1,6), (1,7), (2,0), (2,1), (2,3), (2,4), (2,6), (2,7), (3,0), (3,1), (3,3), (3,4), (3,6), (3,7), (4,0), (4,1), (4,3), (4,4), (4,6), (4,7)]
uJ-2.txt->	[(0,0), (0,1), (1,0), (1,1), (1,2), (2,0), (2,1), (3,0), (3,1), (4,0), (4,1), (5,0), (5,1), (6,0), (6,1), (6,2), (6,3), (6,4), (6,5), (6,6), (6,7), (6,8), (6,9)]
lf-4.txt->	[(0,0), (0,1), (1,0), (1,1), (1,7), (2,0), (2,1), (2,2), (2,3), (2,4), (2,5), (2,6), (2,7), (2,8), (2,9), (2,10), (3,0), (3,1), (3,3), (3,4), (4,0), (4,1), (4,3), (4,4)]
07.txt->	[(0,0), (0,1), (1,0), (1,1), (1,8), (1,9), (1,10), (2,0), (2,1), (2,5), (2,6), (2,7), (2,8), (2,9), (2,10), (3,0), (3,1), (3,3), (3,4), (3,5), (3,6), (3,7), (4,0), (4,1), (4,2), (4,3), (4,4), (5,0), (5,1), (5,2), (6,0), (6,1)]
uZ-3.txt->	[(0,0), (0,1), (1,0), (1,1), (1,8), (1,9), (1,10), (2,0), (2,1), (2,6), (2,7), (2,8), (2,9), (2,10), (3,0), (3,1), (3,5), (3,6), (3,7), (3,8), (3,9), (3,10), (4,0), (4,1), (4,4), (4,5), (4,6), (4,9), (4,10), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,9), (5,10), (6,0), (6,1), (6,2), (6,3), (6,9), (6,10), (7,0), (7,1), (7,2), (7,9), (7,10)]
07-1.txt->	[(0,0), (0,1), (1,0), (1,1), (1,9), (1,10), (2,0), (2,1), (2,6), (2,7), (2,8), (2,9), (2,10), (3,0), (3,1), (3,4), (3,5), (3,6), (3,7), (4,0), (4,1), (4,2), (4,3), (4,4), (5,0), (5,1), (5,2)]
01.txt->	[(0,0), (0,1), (1,0), (1,1), (2,0), (2,1), (2,2), (2,3), (2,4), (2,5), (2,6), (2,7), (2,8), (2,9), (2,10), (3,0), (3,1), (3,2), (3,3), (3,4), (3,5), (3,6), (3,7), (3,8), (3,9), (3,10)]
uT.txt->	[(0,0), (0,1), (1,0), (1,1), (2,0), (2,1), (3,0), (3,1), (3,10), (4,0), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6), (4,7), (4,8), (4,9), (4,10), (5,0), (5,1), (5,10), (6,0), (7,0), (7,1), (8,0), (8,1)]
01-1.txt->	[(0,0), (0,1), (1,0), (1,1), (2,0), (2,1), (3,0), (3,1), (3,2), (3,3), (3,4), (3,5), (3,6), (3,7), (3,8), (3,9), (3,10), (4,0), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6), (4,7), (4,8), (4,9), (4,10)]
uT-1.txt->	[(0,0), (0,1), (1,0), (1,1), (2,0), (2,1), (3,0), (3,1), (3,2), (3,3), (3,4), (3,5), (3,6), (3,7), (3,8), (3,9), (3,10), (4,0), (4,1), (4,9), (4,10), (5,0), (5,1), (6,0), (6,1), (7,0), (7,1)]
lf-2.txt->	[(0,0), (0,1), (1,0), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (2,0), (2,1), (2,2), (2,3), (2,4), (2,5), (2,6), (2,7), (2,8), (2,9), (2,10), (3,0), (3,1), (3,3), (3,4), (3,7), (4,0), (4,1), (4,3), (4,4), (5,0), (5,1)]
lf-1.txt->	[(0,0), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (2,0), (2,1), (2,3), (2,4), (2,7), (3,0), (3,1), (3,3), (3,4)]
ln-1.txt->	[(0,0), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (2,0), (3,0), (3,1), (4,0), (4,1), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,6), (5,7), (6,0), (6,1), (6,2), (6,3), (6,4), (6,5), (6,6)]
uQ.txt->	[(0,0), (0,2), (0,3), (0,4), (0,5), (1,0), (1,1), (1,2), (1,4), (1,5), (1,6), (1,7), (1,8), (2,0), (2,6), (2,7), (3,0), (3,8), (3,9), (4,0), (4,1), (4,9), (4,10), (5,0), (5,1), (5,7), (5,8), (5,9), (5,10), (6,0), (6,1), (6,8), (6,9), (6,10), (7,0), (7,1), (7,7), (7,8), (7,9), (8,0), (8,1), (8,2), (8,3), (8,4), (8,5), (8,6), (8,7), (8,8), (8,9), (9,0), (9,1), (9,2), (9,3), (9,4)]
uA-1.txt->	[(0,0), (0,2), (0,3), (1,0), (1,1), (1,2), (1,3), (1,4), (2,0), (2,1), (2,3), (2,4), (3,0), (3,1), (3,4), (3,5), (4,0), (4,1), (4,6), (4,7), (5,0), (5,1), (5,2), (5,3), (5,5), (5,6), (6,0), (6,1), (6,2), (6,3), (6,4), (7,0), (7,1), (7,2), (7,3), (8,0), (8,1), (8,2)]
05.txt->	[(0,0), (0,2), (0,3), (1,0), (1,1), (1,3), (1,4), (1,6), (1,7), (1,8), (1,9), (2,0), (2,1), (2,3), (2,4), (2,9), (2,10), (3,0), (3,1), (3,3), (3,4), (3,9), (3,10), (4,0), (4,1), (4,3), (4,4), (4,9), (4,10), (5,0), (5,1), (5,4), (5,5), (5,6), (5,7), (5,8), (5,9), (6,0), (6,1), (6,2)]
la.txt->	[(0,0), (0,3), (0,4), (0,5), (0,6), (1,0), (1,1), (1,4), (1,5), (1,6), (1,7), (2,0), (2,1), (2,3), (2,6), (2,7), (3,0), (3,1), (3,3), (3,5), (3,6), (3,7), (4,0), (4,1), (4,2), (4,3), (4,4), (4,5), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,6), (5,7)]
la-1.txt->	[(0,0), (0,3), (0,4), (0,5), (0,6), (1,0), (1,1), (1,4), (1,5), (1,6), (1,7), (2,0), (2,1), (2,6), (2,7), (3,0), (3,1), (3,3), (3,6), (3,7), (4,0), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,6), (5,7)]
la-2.txt->	[(0,0), (0,3), (0,4), (0,5), (0,6), (1,0), (1,1), (1,4), (1,7), (2,0), (2,1), (2,3), (2,6), (2,7), (3,0), (3,1), (3,3), (3,6), (3,7), (4,0), (4,1), (4,2), (4,3), (4,6), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,6), (6,0)]
03.txt->	[(0,0), (0,5), (0,6), (1,0), (1,1), (1,2), (1,7), (1,8), (1,9), (2,0), (2,1), (2,9), (2,10), (3,0), (3,1), (3,4), (3,5), (3,8), (3,9), (3,10), (4,0), (4,1), (4,2), (4,4), (4,9), (4,10), (5,0), (5,1), (5,2), (5,5), (5,6), (5,7), (5,8), (6,0), (6,1)]
ly-2.txt->	[(0,0), (1,0), (1,1), (1,10), (2,0), (2,5), (3,0), (3,1), (3,2), (3,4), (3,5), (4,0), (4,1), (4,3), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (6,0), (6,1), (6,2), (7,0)]
ly-1.txt->	[(0,0), (1,0), (1,1), (1,2), (1,10), (2,0), (2,1), (2,2), (2,3), (2,8), (3,0), (3,1), (3,2), (3,3), (3,4), (3,5), (4,0), (4,1), (4,2), (4,3), (5,0), (5,1), (5,2), (5,3), (6,0), (6,1), (6,3), (7,0)]
uW-3.txt->	[(0,0), (1,0), (1,1), (1,2), (1,3), (1,4), (2,0), (2,1), (2,2), (2,3), (2,4), (3,0), (3,1), (3,2), (4,0), (4,1), (4,2), (4,3), (4,4), (5,0), (5,1), (5,3), (5,4), (5,5), (5,6), (5,7), (6,0), (6,1), (6,2), (7,0), (7,1), (7,2), (8,0), (8,1), (8,2), (8,3), (8,4), (9,0), (9,1), (9,2), (9,3), (9,4), (9,5), (10,0), (10,1), (10,2), (10,3), (11,0), (11,1), (11,2), (11,3), (11,4), (11,5), (12,0), (12,1), (12,2), (12,3), (12,4), (12,5), (13,0), (13,1)]
uW-1.txt->	[(0,0), (1,0), (1,1), (1,2), (1,3), (2,0), (2,1), (2,2), (2,3), (2,4), (2,5), (2,6), (3,0), (3,1), (3,2), (3,3), (4,0), (4,2), (4,3), (4,4), (4,5), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (6,0), (7,0), (7,1), (8,0), (8,1), (8,3), (8,4), (9,0), (9,1), (9,2), (9,3), (9,4), (9,5), (9,6), (10,0), (10,1), (10,2), (10,3), (11,0), (11,1), (11,2), (11,3), (11,4), (12,0), (12,1), (12,3), (12,4), (12,5), (13,0), (13,1)]
uW.txt->	[(0,0), (1,0), (1,1), (1,2), (1,3), (2,0), (2,1), (2,2), (2,3), (3,0), (3,1), (3,2), (3,3), (4,0), (4,1), (4,2), (4,3), (4,4), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (6,0), (6,1), (7,0), (7,2), (8,0), (8,1), (8,2), (8,3), (8,4), (8,5), (9,0), (9,1), (9,2), (9,3), (9,4), (9,5), (10,0), (10,1), (10,2), (10,3), (11,0), (11,1), (11,2), (11,3), (11,4), (11,5), (11,6), (12,0), (12,1), (12,2), (12,3), (12,5), (13,0), (13,1)]
uY-1.txt->	[(0,0), (1,0), (1,1), (1,2), (1,3), (2,0), (2,1), (2,2), (3,0), (3,1), (3,2), (3,3), (3,4), (3,5), (3,6), (4,0), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6), (5,0), (5,2), (5,3), (6,0), (6,1), (6,2), (7,0), (7,1), (8,0)]
lw-3.txt->	[(0,0), (1,0), (1,1), (1,2), (2,0), (2,1), (2,2), (2,3), (2,4), (3,0), (3,1), (4,0), (4,1), (4,2), (4,3), (5,0), (5,1), (5,2), (5,3), (6,0), (6,1), (6,2), (7,0), (7,1), (7,2), (7,3), (7,4), (7,5), (8,0), (8,1), (8,2), (9,0), (9,1), (9,2), (9,3), (9,4), (10,0), (10,1), (10,2), (11,0), (11,1)]
lv-1.txt->	[(0,0), (1,0), (1,1), (1,2), (2,0), (2,1), (2,2), (2,3), (3,0), (3,1), (3,2), (4,0), (4,1), (4,2), (5,0), (5,1), (5,2), (5,3), (6,0), (6,1), (6,2), (7,0)]
uJ.txt->	[(0,0), (1,0), (1,1), (1,2), (2,0), (2,1), (2,2), (3,0), (3,1), (4,0), (4,1), (5,0), (5,1), (5,2), (5,3), (5,4), (5,5), (5,6), (5,7), (5,8), (5,9), (5,10), (6,0), (6,1), (6,2), (6,3), (6,4), (6,5), (6,6), (6,7), (6,8), (6,9)]
lj.txt->	[(0,0), (1,0), (1,1), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (1,11), (1,12), (2,0), (2,1), (2,3), (2,4), (2,5), (2,6), (2,7), (2,8), (2,9), (2,10), (2,11), (2,12)]
uS-1.txt->	[(0,0), (1,0), (1,1), (1,6), (1,7), (2,0), (2,1), (2,2), (2,7), (2,8), (2,9), (3,0), (3,1), (3,4), (3,5), (3,9), (3,10), (4,0), (4,1), (4,4), (4,5), (4,6), (4,9), (4,10), (5,0), (5,1), (5,5), (5,6), (5,9), (5,10), (6,0), (6,1), (6,4), (6,5), (6,6), (6,7), (6,8), (6,9), (7,0), (7,4), (7,5), (7,6), (7,7)]
04-2.txt->	[(0,0), (1,0), (1,1), (2,0), (2,1), (2,2), (2,3), (3,0), (3,1), (3,2), (3,3), (3,4), (4,0), (4,1), (4,2), (4,5), (4,6), (5,0), (5,1), (5,2), (5,3), (5,6), (5,7), (6,0), (6,1), (6,2), (6,3), (6,4), (6,5), (6,6), (6,7), (6,8), (6,9), (6,10), (7,0), (7,1), (7,2), (7,3), (7,4), (7,5), (7,6), (7,7), (7,8), (7,9), (7,10)]

        可以看到这些像素坐标拥有众多的公共前缀,因此将它们组织成Tire树用于快定位到相应的字符是一个可行的方案。以下是针对字符描述字典所创建的Tire树节点的数据结构。

static class TireTreeNode {                                                                            
    Character character;                                                                               
    CharPixelCoordinate charPixelCoordinate;                                                           
    TireTreeNode[] subNodes = new TireTreeNode[23];                                                    
                                                                                                       
    public TireTreeNode(CharPixelCoordinate charPixelCoordinate) {                                     
        this.charPixelCoordinate = charPixelCoordinate;                                                
    }                                                                                                  
                                                                                                       
    @Override                                                                                          
    public String toString() {                                                                         
        return (character == null ? "" : "character=" + character + ',' + ' ') + charPixelCoordinate;  
    }                                                                                                  
}                                                                                                      

        这里就先不用去考虑什么数组扩容或数组加链表的形式了,因此将数组的长度设置为一个素数,以便最大可能降低hashcode取模产生重复值的可能。以下是加载到Tire树中的字符描述字典数据的按层遍历结果。

level: 1 | (0,0)
level: 2 | (0,5)(1,1)(1,8)(1,10)(1,11)(0,1)(0,2)(0,3)
level: 3 | (0,6)(1,2)(1,9)(1,11)(1,12)(0,5)(0,6)(0,7)(0,8)(0,9)(0,10)(1,7)(1,8)(1,9)(1,10)(1,11)(0,2)(0,3)(0,3)(0,4)
level: 4 | (1,9)(1,4)(1,10)(2,19)(1,21)(1,13)(1,17)(0,6)(0,7)(0,8)(0,9)(0,10)(0,11)(1,8)(1,9)(1,10)(1,11)(1,12)(0,5)(0,6)(1,8)(1,9)(1,10)(1,13)(0,3)(0,4)(0,4)(1,7)(1,9)(0,4)(0,5)
level: 5 | (1,10)(1,5)(2,17)(2,18)(2,20)(2,27)(1,21)(2,23)(1,14)(1,18)(0,7)(1,7)(1,8)(1,10)(0,10)(1,11)(0,12)(1,10)(1,9)(1,10)(1,11)(2,20)(2,21)(1,20)(2,22)(1,18)(1,19)(0,6)(0,7)(1,9)(1,10)(1,11)(1,14)(0,5)(0,6)(1,6)(1,7)(1,9)(1,10)(1,11)(1,13)(0,4)(0,5)(0,6)(0,5)(1,8)(1,10)(0,5)(0,6)
level: 6 | (1,11)(1,6)(2,18)(2,19)(2,21)(2,32)(2,24)(2,24)(2,24)(2,25)(2,26)(1,15)(2,21)(1,8)(1,8)(1,9)(1,11)(1,12)(1,11)(1,12)(1,13)(1,11)(1,10)(1,11)(1,12)(2,21)(2,22)(1,21)(2,23)(2,19)(1,20)(0,7)(0,8)(1,10)(1,10)(1,11)(1,12)(2,24)(0,6)(1,10)(1,13)(0,7)(1,7)(1,12)(1,8)(1,11)(1,11)(1,12)(1,14)(0,5)(0,6)(0,7)(1,6)(1,11)(0,6)(0,8)(0,6)(1,10)(1,11)(0,6)(1,10)(1,7)
level: 7 | (1,16)(1,7)(2,19)(2,20)(2,22)(3,38)(2,25)(2,25)(2,25)(2,26)(2,27)(2,24)(2,22)(1,9)(1,9)(1,10)(1,12)(1,17)(1,12)(1,13)(1,19)(1,14)(1,12)(1,13)(1,12)(1,13)(2,22)(3,30)(2,22)(3,33)(2,20)(1,21)(1,10)(0,9)(1,11)(1,11)(1,12)(1,12)(1,14)(1,13)(2,25)(0,7)(1,11)(1,14)(1,8)(1,8)(1,13)(1,11)(1,12)(1,12)(1,13)(1,15)(0,6)(0,7)(1,7)(1,8)(1,10)(1,11)(0,7)(0,8)(1,7)(1,12)(0,7)(0,9)(0,7)(1,11)(1,12)(0,7)(1,11)(1,8)
level: 8 | (1,17)(1,8)(2,20)(2,21)(3,29)(3,39)(2,26)(3,35)(2,26)(2,27)(2,28)(2,25)(2,23)(1,12)(1,10)(1,13)(1,16)(1,17)(1,18)(1,17)(1,18)(1,18)(1,19)(1,20)(1,16)(2,13)(1,14)(1,13)(1,14)(2,23)(3,31)(2,23)(3,34)(2,21)(2,22)(1,13)(0,10)(1,12)(2,16)(2,16)(1,13)(1,14)(1,15)(2,20)(3,35)(0,8)(1,12)(1,15)(1,9)(1,9)(2,14)(2,14)(1,13)(1,13)(1,14)(2,26)(0,7)(1,7)(1,8)(1,10)(1,11)(0,8)(1,8)(1,9)(1,11)(1,12)(0,8)(1,10)(1,10)(1,10)(1,15)(0,8)(0,9)(0,10)(0,8)(1,13)(1,13)(1,8)(1,12)(1,11)
level: 9 | (1,18)(1,9)(3,29)(2,22)(3,30)(3,40)(2,27)(3,36)(3,37)(2,28)(2,29)(2,26)(2,28)(1,13)(1,13)(1,14)(1,17)(1,18)(1,19)(1,18)(1,19)(1,19)(1,20)(1,21)(1,17)(2,14)(2,15)(1,14)(1,15)(2,24)(3,32)(2,28)(3,35)(3,43)(2,22)(2,23)(1,14)(1,11)(1,13)(2,17)(2,17)(2,22)(2,21)(1,16)(2,21)(3,36)(0,9)(1,15)(1,16)(1,11)(1,10)(2,15)(2,15)(1,14)(1,14)(1,15)(2,27)(0,8)(0,10)(1,8)(1,10)(1,11)(1,8)(1,9)(1,11)(1,12)(0,9)(1,9)(1,10)(1,12)(1,13)(0,9)(1,11)(1,11)(1,11)(1,16)(0,9)(0,10)(1,11)(0,9)(1,14)(2,18)(1,9)(1,14)(1,12)(1,14)
level: 10 | (2,20)(1,10)(3,30)(3,30)(3,31)(3,42)(2,32)(4,46)(3,38)(2,29)(3,40)(2,27)(2,29)(1,14)(1,14)(1,15)(1,18)(1,19)(2,20)(1,19)(1,20)(1,20)(1,21)(2,22)(1,18)(2,19)(2,16)(1,15)(1,16)(2,25)(3,33)(2,29)(3,36)(4,44)(2,23)(2,27)(1,15)(1,12)(1,14)(2,18)(2,18)(2,23)(2,22)(2,20)(2,23)(4,37)(0,10)(1,16)(1,18)(1,12)(1,11)(2,17)(2,20)(1,15)(2,18)(2,21)(1,15)(2,24)(2,28)(0,9)(1,11)(1,11)(1,9)(1,11)(1,12)(1,9)(1,10)(1,12)(1,14)(1,13)(1,14)(0,10)(1,10)(1,11)(1,13)(1,14)(0,10)(1,14)(1,12)(1,12)(1,17)(1,10)(1,11)(1,12)(0,10)(1,15)(2,19)(1,10)(1,15)(1,13)(2,15)
level: 11 | (2,21)(1,11)(3,31)(3,31)(3,32)(3,43)(3,38)(4,47)(3,39)(2,30)(3,41)(2,28)(2,30)(1,15)(2,15)(2,17)(2,18)(1,19)(2,20)(2,21)(1,20)(1,21)(1,21)(2,23)(2,23)(1,19)(2,20)(2,18)(2,17)(1,17)(2,26)(3,34)(2,30)(3,37)(4,45)(2,24)(2,28)(1,16)(1,14)(1,17)(2,19)(2,19)(3,29)(2,23)(2,21)(2,24)(4,38)(1,11)(1,17)(2,29)(1,14)(1,12)(2,18)(2,21)(2,21)(2,19)(2,22)(1,16)(2,25)(2,29)(0,10)(1,10)(1,12)(1,12)(1,10)(1,11)(1,12)(1,13)(1,10)(1,11)(1,13)(1,15)(1,14)(1,15)(1,11)(1,11)(1,12)(1,14)(1,15)(1,12)(1,15)(1,13)(1,14)(1,13)(2,22)(1,12)(1,12)(1,13)(0,11)(1,11)(1,16)(2,21)(1,11)(1,16)(1,14)(2,16)
level: 12 | (2,29)(1,12)(4,37)(4,36)(3,33)(4,50)(3,39)(5,48)(3,40)(2,31)(3,42)(3,40)(3,31)(2,16)(2,16)(2,18)(2,19)(2,20)(2,21)(2,27)(1,21)(2,22)(2,25)(2,24)(2,28)(1,20)(2,21)(2,19)(2,18)(1,18)(2,27)(3,35)(2,31)(3,38)(4,46)(2,25)(2,29)(1,18)(1,15)(1,18)(2,20)(2,20)(3,30)(3,28)(2,26)(3,30)(4,39)(1,12)(2,21)(2,30)(1,15)(2,14)(2,20)(3,22)(2,22)(2,20)(3,29)(2,20)(2,26)(2,30)(1,11)(1,11)(1,12)(1,13)(1,13)(1,11)(1,12)(1,13)(1,14)(1,11)(1,12)(1,14)(1,17)(1,15)(1,16)(1,13)(1,13)(1,13)(1,15)(1,16)(1,13)(1,17)(1,14)(1,15)(2,14)(2,27)(1,14)(1,13)(1,14)(0,12)(1,12)(2,17)(2,22)(1,12)(1,17)(2,15)(2,18)
level: 13 | (2,30)(1,13)(4,38)(4,37)(4,38)(4,51)(3,40)(5,49)(3,41)(3,40)(3,43)(3,41)(3,32)(2,17)(2,20)(2,17)(2,19)(2,20)(2,21)(2,27)(2,29)(2,22)(2,23)(2,28)(2,25)(2,29)(1,21)(2,22)(2,21)(2,19)(2,19)(2,28)(3,36)(2,32)(3,39)(4,47)(2,26)(2,30)(1,19)(1,16)(2,20)(2,21)(2,21)(3,31)(3,29)(2,27)(3,31)(4,40)(1,13)(2,22)(2,31)(2,16)(2,15)(2,21)(3,23)(2,23)(2,21)(3,30)(2,21)(2,27)(2,31)(1,12)(1,13)(1,14)(1,12)(1,13)(1,14)(1,14)(1,12)(1,13)(1,17)(1,15)(1,12)(1,13)(1,15)(1,18)(1,16)(1,17)(1,14)(1,14)(1,14)(1,16)(1,17)(1,14)(1,18)(1,15)(1,16)(2,15)(2,28)(1,15)(1,14)(1,16)(1,13)(1,13)(2,18)(3,28)(1,13)(1,18)(2,16)(2,21)
level: 14 | (3,31)(2,14)(4,39)(4,38)(4,39)(4,53)(3,41)(5,50)(3,42)(3,41)(4,50)(3,42)(3,35)(2,19)(2,22)(2,18)(2,20)(2,21)(2,27)(2,28)(2,30)(2,23)(2,27)(2,30)(2,28)(2,30)(1,22)(2,23)(2,22)(2,23)(2,20)(2,29)(3,37)(3,33)(3,40)(4,48)(2,27)(2,31)(1,20)(1,17)(2,21)(3,26)(3,25)(4,33)(3,30)(3,31)(3,35)(4,41)(1,14)(2,27)(3,41)(2,17)(2,20)(3,22)(3,28)(3,28)(2,24)(3,31)(2,27)(2,28)(2,32)(1,13)(1,14)(1,15)(1,14)(1,15)(1,13)(1,14)(1,15)(1,15)(1,13)(1,14)(1,18)(1,16)(1,13)(1,14)(1,16)(2,20)(1,17)(1,18)(1,15)(2,15)(1,15)(1,17)(1,18)(1,15)(1,19)(1,16)(1,18)(2,17)(3,33)(1,17)(1,15)(1,17)(1,14)(1,14)(2,20)(3,29)(1,14)(2,22)(2,18)(2,21)(2,22)
level: 15 | (3,32)(2,15)(5,42)(4,39)(4,40)(5,56)(3,42)(5,51)(3,43)(3,42)(4,51)(4,50)(3,36)(2,20)(2,23)(2,19)(2,21)(3,26)(2,28)(2,29)(3,31)(2,27)(2,28)(3,37)(2,29)(2,31)(1,23)(3,24)(3,23)(2,25)(2,21)(2,30)(3,38)(3,34)(3,41)(4,49)(2,28)(2,32)(2,21)(1,18)(2,24)(3,27)(3,26)(4,35)(3,31)(3,32)(4,39)(4,42)(1,15)(2,28)(3,42)(2,19)(2,21)(3,23)(3,29)(3,29)(2,25)(4,32)(3,31)(2,29)(3,37)(1,14)(1,16)(1,15)(1,16)(1,15)(1,17)(1,14)(1,15)(1,16)(1,16)(1,14)(2,17)(1,19)(1,17)(1,14)(1,15)(1,17)(2,21)(2,21)(1,19)(1,16)(2,16)(2,17)(1,18)(2,22)(1,16)(2,20)(1,18)(1,19)(2,18)(3,38)(1,18)(1,16)(1,18)(1,16)(1,15)(2,21)(3,32)(1,15)(2,28)(2,21)(2,22)(3,23)
level: 16 | (3,35)(2,17)(5,43)(5,40)(4,43)(5,57)(3,43)(5,52)(4,48)(3,43)(4,52)(4,51)(3,40)(2,22)(3,24)(2,21)(3,26)(3,27)(2,29)(2,30)(3,32)(2,28)(2,29)(3,38)(2,30)(2,32)(1,24)(3,25)(3,24)(3,27)(2,22)(3,31)(3,39)(3,37)(3,42)(4,50)(2,29)(3,33)(2,22)(1,19)(2,25)(3,31)(3,27)(4,36)(4,32)(3,37)(4,40)(4,43)(1,16)(1,18)(3,32)(3,43)(2,20)(3,22)(3,25)(4,30)(3,31)(3,28)(4,33)(3,32)(3,35)(3,38)(1,15)(1,17)(1,16)(1,17)(1,16)(1,18)(1,15)(1,16)(1,17)(1,18)(1,15)(3,24)(1,20)(1,18)(2,16)(2,22)(1,18)(2,25)(2,22)(2,20)(1,17)(2,18)(2,18)(2,21)(2,23)(1,17)(2,21)(1,19)(1,20)(2,20)(3,39)(2,21)(1,17)(1,19)(1,17)(1,16)(2,26)(3,33)(2,17)(2,29)(2,22)(3,23)(3,24)
level: 17 | (3,36)(2,18)(5,44)(5,41)(4,44)(5,58)(4,50)(5,53)(4,49)(4,49)(4,53)(4,52)(3,41)(2,23)(3,27)(2,22)(3,27)(3,28)(2,30)(3,31)(3,37)(2,29)(2,31)(4,47)(3,36)(3,33)(1,25)(3,29)(3,26)(3,28)(2,23)(3,32)(3,40)(3,38)(3,43)(4,51)(3,30)(3,34)(2,25)(1,20)(2,29)(3,32)(3,28)(4,37)(4,33)(3,38)(4,41)(4,44)(1,17)(1,19)(3,33)(4,46)(2,22)(3,23)(3,26)(4,31)(4,32)(3,29)(4,35)(3,37)(3,36)(3,39)(1,16)(1,18)(1,17)(1,18)(1,17)(1,19)(1,16)(1,17)(1,18)(1,19)(2,16)(3,25)(2,21)(1,19)(3,23)(2,23)(2,20)(2,29)(2,28)(2,21)(1,18)(2,19)(2,23)(2,28)(2,30)(1,18)(2,26)(1,20)(2,21)(2,21)(4,44)(2,22)(1,18)(1,20)(1,18)(1,17)(2,27)(4,37)(3,24)(3,32)(3,23)(3,24)(3,26)
level: 18 | (3,39)(2,19)(5,45)(5,42)(5,48)(5,59)(4,51)(5,54)(4,50)(4,51)(4,54)(4,53)(4,42)(3,24)(3,30)(3,23)(3,28)(3,29)(3,31)(3,32)(3,38)(2,31)(2,32)(4,48)(3,37)(3,34)(2,26)(3,30)(3,27)(3,33)(2,24)(3,33)(4,41)(3,39)(4,44)(4,52)(3,31)(3,36)(2,26)(1,21)(2,30)(4,36)(3,32)(5,40)(4,34)(4,43)(4,45)(4,45)(1,18)(1,20)(3,38)(4,47)(2,23)(3,28)(3,28)(4,36)(4,33)(3,30)(5,40)(3,38)(3,37)(3,40)(1,17)(1,19)(1,18)(1,19)(1,18)(1,20)(1,17)(1,18)(1,19)(1,20)(2,17)(4,32)(2,22)(1,20)(3,24)(3,30)(2,21)(2,30)(2,29)(2,24)(1,20)(2,21)(2,24)(2,29)(3,33)(1,19)(2,29)(2,21)(2,22)(3,22)(4,49)(3,33)(1,19)(1,21)(1,19)(1,18)(3,28)(4,38)(3,25)(3,40)(3,24)(3,26)(3,29)
level: 19 | (3,40)(2,20)(6,48)(5,43)(5,49)(5,60)(4,52)(5,55)(4,51)(4,52)(5,57)(4,54)(4,43)(3,25)(3,31)(3,24)(3,29)(4,32)(3,32)(3,38)(3,40)(2,32)(3,33)(4,49)(3,39)(3,38)(2,27)(3,31)(3,29)(3,34)(2,25)(3,34)(4,42)(3,40)(4,45)(4,53)(3,33)(3,37)(2,30)(2,22)(3,31)(4,37)(4,36)(5,41)(5,40)(4,48)(4,46)(4,46)(1,19)(1,21)(3,39)(4,48)(3,24)(3,29)(3,29)(4,37)(4,34)(3,31)(5,41)(4,43)(3,38)(3,41)(1,21)(1,18)(1,20)(1,19)(1,20)(1,19)(1,21)(1,18)(1,19)(1,20)(1,21)(2,18)(4,33)(2,30)(2,30)(4,31)(3,31)(2,22)(3,31)(3,31)(2,25)(1,21)(2,22)(3,26)(3,31)(3,34)(1,20)(2,30)(2,22)(2,26)(3,23)(5,51)(3,34)(1,20)(2,22)(1,20)(1,19)(3,29)(4,43)(4,32)(3,41)(3,26)(3,29)(3,30)
level: 20 | (3,41)(2,21)(6,49)(6,48)(5,50)(5,61)(4,53)(5,56)(4,52)(4,53)(5,58)(5,56)(4,46)(3,26)(4,32)(3,26)(4,32)(4,33)(3,36)(3,39)(3,41)(3,33)(3,34)(5,56)(3,40)(3,39)(2,29)(3,32)(3,30)(4,36)(2,26)(3,35)(4,43)(4,44)(4,53)(4,54)(3,34)(3,38)(2,31)(2,23)(3,32)(4,42)(4,37)(5,42)(5,41)(4,49)(5,49)(4,47)(1,20)(2,22)(4,44)(4,49)(3,25)(4,30)(4,30)(5,39)(4,35)(3,32)(5,42)(4,48)(3,39)(3,42)(2,26)(1,19)(1,21)(1,20)(1,21)(1,20)(2,27)(1,19)(1,20)(1,21)(2,26)(3,24)(5,41)(2,31)(2,31)(4,32)(4,38)(2,28)(3,35)(3,32)(2,29)(2,23)(3,23)(3,27)(3,32)(3,42)(1,21)(3,31)(2,26)(2,27)(3,25)(5,52)(3,35)(1,21)(2,23)(1,21)(1,20)(3,31)(4,44)(4,33)(4,42)(3,28)(3,30)(4,31)
level: 21 | (4,42)(2,22)(6,50)(6,49)(5,51)(6,66)(5,57)(5,57)(4,53)(4,54)(5,59)(5,57)(4,47)(3,27)(4,35)(3,27)(4,33)(4,34)(3,37)(3,40)(4,42)(3,34)(3,37)(5,57)(4,47)(3,40)(2,30)(3,33)(4,31)(4,37)(2,27)(3,36)(4,44)(4,45)(4,54)(5,55)(4,41)(3,39)(3,32)(2,24)(3,35)(4,43)(4,42)(5,44)(6,51)(5,50)(5,50)(5,48)(1,21)(2,23)(4,49)(5,55)(3,27)(4,31)(4,31)(5,40)(4,36)(3,35)(6,49)(5,54)(4,41)(3,43)(2,27)(1,20)(2,26)(1,21)(2,22)(1,21)(2,28)(1,20)(2,21)(2,30)(3,36)(3,25)(5,42)(3,32)(2,32)(5,39)(4,39)(2,29)(3,36)(3,40)(2,30)(2,31)(3,24)(3,32)(3,40)(3,43)(2,27)(3,32)(2,27)(2,30)(3,26)(5,53)(3,36)(2,27)(2,27)(1,22)(1,21)(3,32)(5,49)(5,40)(4,43)(3,29)(4,31)(4,32)
level: 22 | (4,43)(2,23)(7,56)(6,50)(5,54)(6,67)(5,58)(5,58)(4,54)(5,58)(5,60)(5,59)(4,48)(3,28)(4,38)(3,29)(4,34)(4,36)(3,38)(3,41)(4,47)(3,37)(3,38)(5,58)(4,48)(3,42)(2,31)(3,34)(4,32)(4,42)(2,28)(3,37)(4,45)(4,46)(5,55)(5,56)(4,42)(3,40)(3,33)(3,34)(3,36)(5,47)(4,43)(6,48)(6,52)(5,51)(5,51)(5,49)(2,27)(2,26)(5,51)(5,56)(3,28)(4,36)(4,33)(5,43)(5,40)(3,36)(6,50)(5,55)(4,42)(4,46)(3,37)(1,21)(3,36)(2,22)(2,23)(2,22)(3,33)(2,22)(2,22)(2,31)(3,37)(4,32)(5,43)(3,33)(3,42)(5,40)(5,40)(2,30)(3,40)(3,41)(3,31)(2,32)(3,26)(3,33)(3,41)(4,45)(2,28)(3,37)(2,30)(2,31)(3,28)(5,54)(3,37)(2,28)(2,28)(1,23)(2,28)(3,37)(5,50)(5,41)(4,51)(3,30)(4,32)(4,33)
level: 23 | (4,44)(2,24)(7,58)(5,55)(6,68)(5,59)(6,59)(5,57)(5,59)(5,61)(5,60)(4,51)(3,30)(4,39)(3,30)(4,35)(4,37)(3,39)(4,42)(4,48)(3,38)(3,39)(5,61)(4,49)(3,43)(2,32)(4,35)(4,34)(2,29)(3,38)(4,46)(4,47)(5,56)(5,65)(4,44)(4,44)(3,36)(3,35)(3,37)(5,48)(5,47)(6,53)(5,52)(5,52)(5,50)(2,28)(2,27)(5,52)(5,57)(3,30)(4,37)(4,34)(5,44)(5,41)(4,39)(6,51)(5,56)(4,43)(4,48)(3,38)(2,22)(2,25)(2,26)(2,27)(2,31)(3,37)(2,23)(2,26)(2,26)(3,34)(2,27)(2,30)(2,32)(3,42)(4,33)(5,44)(3,41)(3,43)(5,41)(5,41)(3,31)(3,41)(4,42)(3,32)(3,33)(3,27)(4,36)(4,42)(4,46)(3,37)(3,40)(2,31)(3,32)(3,29)(5,55)(4,49)(3,38)(3,33)(1,24)(3,37)(3,38)(5,51)(5,42)(4,52)(4,31)(4,33)(4,34)
level: 24 | (4,46)(2,25)(7,59)(6,58)(7,77)(5,60)(6,60)(5,59)(5,60)(5,62)(5,61)(4,52)(3,31)(5,40)(4,31)(4,36)(4,38)(3,40)(4,43)(4,51)(3,39)(3,42)(5,62)(4,50)(4,44)(2,33)(4,36)(4,35)(3,30)(3,39)(4,47)(4,48)(6,66)(6,66)(4,45)(4,45)(3,37)(3,36)(3,40)(5,49)(5,48)(6,54)(5,54)(5,53)(5,51)(3,37)(2,31)(5,53)(6,66)(3,31)(5,39)(4,36)(5,45)(5,42)(4,40)(6,52)(5,57)(4,44)(4,49)(4,48)(2,23)(2,26)(2,30)(2,29)(2,32)(4,47)(2,24)(2,27)(2,27)(3,38)(3,32)(2,31)(3,42)(3,43)(5,45)(3,42)(4,53)(5,42)(5,42)(3,32)(4,42)(4,43)(3,35)(3,34)(3,29)(4,41)(4,43)(4,54)(3,38)(3,41)(3,32)(3,33)(4,30)(5,56)(4,52)(4,47)(3,34)(1,25)(3,38)(4,39)(5,52)(5,43)(5,53)(4,32)(4,34)(4,37)
level: 25 | (4,51)(2,26)(7,60)(6,59)(6,66)(6,61)(5,60)(5,61)(6,67)(5,62)(5,53)(4,32)(5,41)(4,32)(4,37)(5,40)(3,41)(4,47)(5,54)(3,42)(3,43)(5,63)(4,51)(4,45)(2,34)(4,39)(4,37)(3,31)(3,40)(4,48)(5,55)(6,67)(7,77)(4,46)(3,41)(3,37)(3,41)(5,50)(5,49)(6,55)(5,55)(5,54)(5,52)(3,38)(2,32)(5,54)(6,67)(5,40)(4,37)(6,48)(5,43)(4,41)(7,56)(5,58)(4,45)(5,56)(4,49)(2,26)(2,27)(2,31)(2,31)(3,38)(3,42)(4,48)(2,25)(3,33)(3,33)(4,44)(3,33)(3,32)(3,43)(4,47)(5,46)(4,43)(4,54)(5,43)(5,43)(3,40)(4,43)(4,47)(3,36)(3,42)(3,30)(5,44)(4,51)(4,55)(4,47)(4,43)(3,33)(3,37)(4,33)(5,57)(5,61)(4,48)(3,38)(3,39)(4,40)(5,54)(5,44)(5,54)(4,33)(4,35)(5,40)
level: 26 | (4,52)(7,61)(6,60)(6,67)(6,62)(6,67)(5,62)(6,68)(5,63)(5,54)(4,33)(5,42)(4,34)(4,38)(5,41)(4,42)(4,48)(5,55)(3,43)(4,44)(5,64)(5,56)(4,48)(2,35)(4,40)(4,38)(3,33)(3,41)(4,49)(5,56)(7,77)(7,78)(4,47)(3,42)(3,38)(4,42)(5,53)(5,50)(7,61)(5,56)(5,55)(5,53)(4,47)(3,33)(5,55)(6,68)(5,43)(5,39)(6,51)(6,48)(4,42)(7,62)(5,59)(4,46)(5,57)(5,59)(2,27)(2,28)(2,32)(3,36)(3,39)(3,43)(5,58)(3,35)(3,34)(3,38)(4,45)(3,38)(3,33)(4,53)(4,48)(5,47)(4,44)(5,64)(5,44)(5,44)(3,41)(4,44)(4,51)(3,40)(3,43)(4,31)(5,45)(4,52)(5,57)(4,48)(4,51)(3,37)(3,38)(4,34)(5,58)(5,64)(4,49)(3,39)(3,40)(4,42)(5,55)(5,45)(5,60)(4,34)(4,36)(5,41)
level: 27 | (5,54)(7,62)(6,61)(6,69)(6,63)(6,68)(5,63)(7,77)(6,67)(5,58)(4,34)(5,46)(4,35)(5,40)(5,46)(4,43)(4,51)(5,56)(4,44)(4,45)(6,67)(5,57)(4,49)(2,36)(4,41)(3,34)(4,50)(5,57)(7,78)(8,88)(4,48)(4,43)(3,39)(4,43)(5,54)(5,51)(7,62)(5,57)(5,56)(5,54)(4,48)(3,34)(5,56)(6,69)(5,44)(5,40)(6,49)(4,43)(7,63)(5,62)(5,50)(5,58)(5,60)(3,33)(2,31)(3,33)(3,36)(3,37)(3,40)(4,53)(5,59)(3,36)(3,37)(4,44)(4,49)(3,39)(3,41)(4,54)(4,53)(6,49)(4,45)(5,65)(5,45)(5,45)(4,42)(4,46)(4,52)(3,41)(4,44)(4,32)(5,46)(5,53)(5,58)(4,49)(4,52)(3,38)(3,41)(4,36)(5,59)(6,69)(5,56)(4,44)(4,48)(4,43)(6,62)(5,46)(5,61)(4,35)(4,37)(5,42)
level: 28 | (5,55)(7,63)(6,62)(7,77)(6,64)(6,69)(6,66)(7,79)(6,68)(5,59)(4,38)(5,47)(4,36)(5,41)(5,47)(4,44)(4,52)(5,57)(4,45)(4,47)(6,68)(5,58)(4,50)(2,37)(4,44)(4,41)(4,51)(8,89)(5,55)(4,44)(4,49)(4,47)(6,62)(5,52)(7,63)(5,58)(5,57)(5,55)(4,49)(3,37)(5,59)(7,79)(6,51)(5,41)(6,50)(4,44)(8,67)(5,63)(5,51)(6,66)(6,70)(3,34)(2,32)(3,34)(3,37)(3,42)(4,47)(4,54)(5,60)(3,37)(3,38)(4,48)(4,50)(4,43)(3,42)(5,64)(4,54)(6,50)(4,52)(6,74)(5,46)(5,46)(4,43)(4,47)(5,53)(4,42)(4,45)(4,34)(5,47)(5,54)(5,64)(5,57)(5,53)(3,41)(3,42)(5,39)(5,60)(6,70)(5,57)(4,45)(4,49)(4,48)(6,63)(5,47)(5,62)(4,36)(5,39)(5,43)
level: 29 | (5,56)(8,69)(6,63)(6,65)(7,77)(7,77)(8,89)(6,69)(5,62)(4,39)(4,37)(5,45)(6,48)(4,45)(5,63)(4,47)(4,48)(6,73)(5,59)(4,53)(2,38)(4,45)(4,42)(5,56)(4,47)(4,50)(4,48)(6,63)(5,54)(8,67)(5,59)(5,58)(5,56)(5,57)(3,38)(5,60)(7,80)(5,42)(6,51)(4,45)(8,68)(6,64)(5,52)(6,67)(6,71)(3,37)(3,33)(3,38)(3,42)(3,43)(4,48)(5,64)(5,61)(3,38)(4,44)(5,55)(5,55)(4,44)(4,43)(5,65)(5,58)(6,52)(4,53)(6,75)(5,47)(4,51)(4,51)(5,54)(4,43)(4,53)(4,35)(5,48)(5,58)(5,65)(5,58)(5,54)(3,42)(4,43)(5,40)(5,61)(6,71)(5,60)(4,49)(4,50)(4,49)(6,64)(6,49)(5,63)(5,39)(5,40)(5,44)
level: 30 | (5,59)(8,70)(6,64)(6,66)(7,78)(7,78)(8,90)(7,77)(5,63)(5,40)(4,38)(5,46)(6,49)(4,46)(4,48)(4,49)(6,74)(5,61)(4,54)(5,46)(5,57)(4,48)(4,51)(4,51)(6,64)(6,61)(8,68)(5,60)(5,59)(5,57)(5,58)(3,42)(6,62)(7,81)(5,44)(6,52)(4,46)(8,69)(6,65)(5,53)(7,77)(3,38)(3,34)(3,39)(3,43)(4,47)(4,49)(5,65)(5,63)(4,48)(4,45)(5,56)(5,56)(4,49)(4,44)(6,74)(5,59)(7,57)(5,55)(6,76)(6,48)(4,52)(4,52)(5,58)(4,44)(4,54)(4,37)(5,49)(5,59)(5,66)(5,60)(5,55)(4,43)(4,44)(5,42)(6,62)(6,72)(5,61)(4,50)(4,51)(5,50)(6,65)(6,50)(6,64)(5,40)(5,41)(5,45)
level: 31 | (5,60)(8,71)(6,65)(6,67)(8,88)(8,89)(8,91)(7,78)(6,65)(5,41)(5,39)(5,47)(6,55)(4,47)(4,49)(4,53)(6,75)(5,62)(5,55)(5,47)(6,66)(4,52)(4,53)(4,52)(6,65)(6,62)(8,69)(6,61)(6,60)(5,60)(3,43)(6,63)(7,82)(6,49)(6,53)(4,47)(8,70)(6,66)(5,54)(7,78)(4,44)(3,37)(4,44)(4,47)(4,48)(4,51)(6,75)(5,64)(4,50)(4,48)(5,59)(5,60)(4,50)(4,52)(6,75)(5,63)(8,65)(5,56)(7,77)(6,49)(5,53)(5,54)(5,59)(4,46)(5,55)(4,38)(5,50)(5,62)(5,67)(5,61)(5,57)(4,44)(4,45)(5,44)(6,63)(7,78)(5,62)(5,55)(4,52)(5,51)(6,66)(6,51)(6,65)(5,41)(5,42)(5,46)
level: 32 | (5,61)(9,75)(6,66)(6,68)(8,90)(8,92)(7,79)(6,66)(5,46)(5,40)(4,48)(4,53)(4,54)(6,76)(5,63)(5,56)(5,48)(6,67)(4,53)(4,54)(5,54)(7,75)(6,63)(8,70)(6,62)(6,61)(5,61)(4,44)(6,64)(7,83)(6,50)(6,54)(4,48)(8,71)(6,67)(7,79)(4,45)(3,38)(4,45)(4,48)(4,53)(4,52)(6,76)(5,65)(4,51)(4,49)(5,60)(5,62)(5,54)(4,53)(6,76)(5,65)(9,72)(5,57)(7,78)(6,50)(5,54)(5,55)(5,62)(4,47)(5,56)(5,51)(5,63)(6,69)(5,62)(5,58)(4,45)(4,48)(6,49)(6,64)(7,79)(6,66)(5,56)(4,53)(5,54)(7,76)(6,52)(6,72)(5,42)(5,43)(6,54)
level: 33 | (5,62)(9,76)(6,67)(8,92)(8,93)(8,89)(6,69)(5,47)(5,43)(4,51)(4,54)(5,55)(7,77)(6,66)(5,58)(5,49)(5,55)(5,62)(5,55)(7,76)(6,64)(8,71)(6,63)(6,62)(5,62)(4,45)(6,65)(8,94)(6,55)(4,49)(9,72)(6,68)(7,80)(4,48)(3,42)(4,49)(4,53)(4,54)(4,53)(7,86)(6,70)(5,62)(5,55)(6,66)(6,66)(5,55)(5,54)(7,77)(6,70)(9,73)(5,58)(7,79)(6,51)(5,62)(5,58)(5,63)(4,48)(5,64)(5,52)(6,64)(6,70)(6,66)(5,59)(4,48)(4,49)(6,65)(8,87)(6,67)(5,60)(5,58)(5,55)(7,77)(6,53)(6,73)(5,43)(5,44)
level: 34 | (6,71)(9,77)(6,68)(8,93)(8,94)(8,90)(6,70)(5,44)(4,52)(5,55)(5,56)(7,86)(6,67)(5,60)(5,50)(5,56)(5,63)(5,58)(7,77)(6,65)(9,72)(6,64)(6,63)(6,66)(4,48)(6,66)(8,95)(7,61)(9,73)(6,69)(7,81)(4,49)(3,43)(4,50)(4,54)(5,58)(5,58)(7,87)(6,71)(5,63)(5,56)(6,67)(6,67)(5,56)(5,55)(7,78)(6,71)(9,74)(5,60)(7,80)(6,52)(5,63)(5,59)(6,64)(4,50)(5,65)(6,53)(6,65)(6,77)(6,68)(5,60)(4,49)(4,51)(6,66)(8,88)(6,68)(5,61)(5,59)(5,56)(7,78)(6,54)(6,74)(5,44)(5,45)
level: 35 | (6,72)(9,78)(7,69)(9,103)(9,104)(8,91)(6,71)(5,45)(5,54)(5,56)(5,57)(7,87)(6,68)(5,64)(5,51)(5,57)(5,64)(5,59)(7,78)(7,75)(9,73)(6,65)(6,64)(6,67)(4,49)(6,67)(8,96)(7,63)(9,74)(6,70)(7,82)(5,55)(4,44)(5,55)(5,58)(5,59)(5,59)(6,72)(6,74)(5,59)(6,70)(6,71)(5,60)(5,63)(7,79)(6,73)(10,81)(5,61)(7,81)(6,53)(6,64)(5,60)(6,65)(4,51)(6,66)(6,54)(6,69)(6,79)(6,73)(5,61)(4,50)(4,52)(6,67)(9,98)(6,72)(5,62)(5,63)(5,57)(7,79)(6,55)(7,76)(5,45)(5,46)
level: 36 | (9,79)(7,70)(9,104)(9,105)(8,92)(6,72)(5,55)(5,57)(5,58)(8,88)(6,74)(5,65)(5,55)(5,58)(5,65)(5,60)(7,79)(7,76)(9,74)(6,66)(6,65)(6,68)(4,53)(6,68)(8,97)(8,68)(9,75)(6,71)(7,83)(5,56)(4,45)(5,56)(5,59)(5,60)(5,63)(6,73)(6,75)(5,60)(6,71)(6,72)(5,61)(5,64)(7,80)(6,74)(10,82)(5,62)(7,82)(6,54)(6,65)(5,61)(6,69)(4,52)(6,67)(6,55)(6,70)(7,82)(6,74)(5,62)(4,51)(4,53)(6,68)(9,99)(6,73)(6,67)(5,64)(5,58)(8,89)(7,77)(5,46)
level: 37 | (10,81)(7,71)(9,105)(9,106)(8,93)(6,73)(5,56)(5,58)(5,59)(8,98)(6,75)(6,66)(5,56)(5,60)(6,70)(5,61)(7,77)(9,75)(6,67)(6,66)(6,73)(4,54)(6,69)(8,98)(8,69)(9,76)(6,73)(7,84)(5,59)(4,48)(5,60)(5,60)(5,63)(5,64)(6,74)(6,76)(6,66)(6,73)(6,66)(6,66)(7,81)(6,75)(10,83)(5,63)(7,83)(6,55)(6,66)(5,62)(6,70)(5,54)(6,68)(6,56)(6,73)(7,83)(6,75)(5,63)(4,52)(5,55)(6,69)(9,100)(6,74)(6,71)(5,65)(5,59)(8,90)(7,83)
level: 38 | (10,82)(7,72)(9,106)(9,107)(9,104)(6,74)(5,57)(5,59)(5,64)(6,76)(6,67)(6,57)(5,61)(6,71)(5,62)(7,78)(9,76)(6,68)(6,67)(6,74)(5,55)(6,70)(9,106)(8,70)(10,80)(6,74)(7,85)(5,60)(4,49)(5,61)(5,63)(5,64)(5,65)(6,75)(7,77)(6,67)(6,74)(6,67)(6,73)(7,82)(7,83)(10,84)(6,69)(7,84)(6,72)(6,73)(5,55)(6,74)(6,57)(6,74)(7,89)(7,77)(6,64)(4,53)(5,56)(6,70)(9,101)(6,75)(6,72)(6,69)(6,66)(8,91)(7,84)
level: 39 | (10,83)(7,73)(9,107)(9,108)(9,105)(7,77)(5,58)(5,64)(5,65)(7,77)(6,68)(6,58)(5,62)(6,72)(5,63)(7,79)(10,80)(6,69)(6,68)(6,75)(5,59)(6,71)(9,107)(8,71)(10,81)(7,86)(6,66)(4,53)(6,66)(5,64)(5,65)(6,69)(6,76)(7,78)(6,70)(6,75)(6,68)(6,74)(7,83)(7,84)(10,85)(6,70)(7,85)(6,73)(6,74)(5,58)(6,76)(6,58)(7,75)(7,90)(7,78)(6,65)(5,55)(5,57)(6,71)(9,102)(7,77)(6,73)(6,76)(6,67)(7,85)
level: 40 | (11,88)(7,74)(9,108)(9,109)(9,106)(7,81)(5,59)(5,65)(6,66)(7,86)(6,69)(6,59)(6,72)(6,73)(6,66)(8,88)(10,81)(6,70)(6,69)(7,77)(5,60)(6,72)(9,108)(9,72)(7,87)(6,67)(4,54)(6,67)(5,65)(6,70)(6,76)(7,79)(6,71)(7,78)(6,69)(6,75)(7,84)(10,86)(6,71)(7,86)(6,74)(7,76)(5,60)(7,78)(6,59)(7,76)(7,91)(7,85)(6,66)(5,56)(5,58)(6,72)(9,103)(7,78)(6,74)(6,68)(8,87)
level: 41 | (11,89)(7,75)(9,109)(10,117)(9,107)(7,82)(5,62)(6,66)(6,67)(7,87)(6,70)(6,60)(6,73)(6,74)(6,70)(8,89)(6,71)(6,70)(7,78)(5,64)(9,109)(9,73)(8,88)(5,55)(6,68)(6,70)(6,71)(7,82)(7,79)(6,70)(7,77)(7,85)(10,87)(8,88)(7,76)(7,77)(5,61)(7,79)(6,60)(7,77)(7,92)(7,86)(6,67)(5,57)(5,59)(9,104)(7,85)(6,75)(8,88)
level: 42 | (7,76)(10,117)(10,118)(9,108)(7,83)(5,63)(6,67)(6,68)(8,98)(6,75)(6,66)(6,75)(6,71)(8,90)(7,85)(5,65)(10,113)(9,74)(8,89)(5,56)(6,69)(6,71)(6,72)(7,83)(7,80)(6,71)(7,78)(7,86)(8,89)(7,77)(7,80)(6,70)(7,80)(6,61)(7,80)(8,96)(7,87)(6,68)(5,58)(5,60)(9,105)(7,86)(7,78)(8,89)
level: 43 | (7,77)(10,118)(10,119)(9,109)(7,84)(6,65)(6,68)(6,69)(6,76)(6,67)(7,77)(6,72)(7,86)(6,66)(10,114)(9,75)(8,90)(5,59)(6,70)(6,72)(6,73)(7,84)(7,81)(7,79)(7,80)(8,88)(8,90)(7,78)(7,81)(6,71)(7,81)(7,81)(8,97)(8,88)(6,69)(5,59)(5,61)(9,106)(8,88)(7,79)(8,90)
level: 44 | (7,78)(10,119)(10,120)(10,117)(6,66)(6,75)(6,75)(7,77)(7,68)(7,78)(6,73)(7,87)(6,67)(10,115)(10,80)(8,91)(5,60)(6,71)(6,73)(6,74)(7,86)(7,82)(7,80)(7,81)(8,89)(8,91)(7,82)(7,83)(6,72)(7,82)(7,83)(8,98)(8,97)(6,70)(5,60)(5,62)(9,107)(8,97)(7,80)(8,91)
level: 45 | (7,79)(10,120)(11,125)(10,118)(6,67)(6,76)(6,76)(7,78)(7,69)(7,79)(8,88)(6,70)(10,116)(10,81)(8,92)(5,64)(6,72)(6,74)(6,75)(7,87)(7,85)(7,82)(8,90)(8,92)(7,83)(7,84)(7,83)(7,84)(8,99)(8,98)(6,71)(5,61)(5,63)(9,108)(8,98)(7,81)(8,92)
level: 46 | (11,126)(11,126)(10,119)(6,73)(7,77)(7,79)(7,70)(7,80)(8,97)(6,71)(10,117)(8,94)(5,65)(7,78)(6,75)(8,88)(7,86)(7,83)(8,91)(8,93)(7,84)(7,85)(7,84)(7,85)(8,100)(6,72)(5,62)(6,68)(7,82)(8,93)
level: 47 | (11,127)(11,127)(10,120)(6,74)(7,78)(7,86)(7,77)(7,81)(8,98)(6,75)(10,118)(8,95)(6,66)(7,79)(7,83)(8,89)(7,87)(7,84)(8,92)(8,94)(8,87)(7,85)(8,87)(8,101)(6,73)(5,63)(6,69)(7,85)(8,94)
level: 48 | (11,128)(11,128)(11,125)(7,86)(7,87)(7,78)(7,82)(6,76)(10,119)(8,97)(6,67)(7,80)(7,84)(8,90)(8,90)(7,85)(8,93)(8,95)(8,88)(7,86)(8,88)(8,102)(6,70)(6,70)(7,86)(8,95)
level: 49 | (11,129)(11,129)(11,126)(7,87)(8,88)(8,88)(7,78)(11,121)(8,98)(6,70)(7,81)(8,91)(8,91)(8,89)(8,94)(8,91)(8,91)(8,89)(8,103)(6,71)(6,71)(7,87)(8,96)
level: 50 | (11,130)(11,130)(11,127)(8,89)(8,89)(7,79)(11,122)(6,71)(7,82)(8,92)(8,92)(8,90)(8,95)(8,92)(8,92)(8,91)(8,104)(6,72)(8,90)(9,100)
level: 51 | (12,132)(11,131)(11,128)(8,97)(9,99)(7,80)(11,123)(6,75)(8,93)(8,97)(8,91)(8,96)(8,93)(8,93)(8,92)(9,108)(8,91)(9,101)
level: 52 | (12,133)(12,132)(11,129)(8,98)(9,100)(7,81)(11,124)(6,76)(8,94)(8,98)(8,92)(8,94)(8,94)(8,93)(9,109)(8,92)(9,102)
level: 53 | (12,135)(12,133)(11,130)(9,101)(7,82)(11,125)(7,77)(8,95)(8,93)(8,95)(8,95)(8,94)(9,110)(8,97)(9,103)
level: 54 | (12,136)(12,134)(12,132)(9,102)(7,83)(11,126)(7,78)(8,96)(8,94)(9,102)(8,96)(8,95)(9,111)(8,98)(9,104)
level: 55 | (12,137)(12,135)(12,133)(9,103)(7,85)(12,132)(7,81)(8,97)(9,103)(9,99)(9,112)
level: 56 | (13,143)(12,137)(12,134)(9,104)(7,86)(12,133)(7,82)(8,98)(9,104)(9,102)(9,116)
level: 57 | (13,144)(13,143)(12,135)(9,105)(8,94)(7,86)(9,105)(9,103)
level: 58 | (13,144)(12,136)(9,107)(8,95)(7,87)(9,104)
level: 59 | (12,137)(9,108)(8,96)(9,105)
level: 60 | (13,143)(9,109)
level: 61 | (13,144)(10,116)
level: 62 | (10,117)
level: 63 | (10,118)
level: 64 | (10,119)
level: 65 | (10,120)

        借助Tire树这个数据结构来识别字符的优点是:每比对一个字符像素就可以过滤掉那些肯定不匹配的字符描述,而之前的识别算法,甚至本次优化所介绍的“动态滑动窗口”这个新开发的算法都需要逐个比对字符描述,即使两个字符具有显著的差异。例如,待识别字符为 7,那么像 d 和 A这样的字符如果以Tire树进行查找,则在一开始就会被过滤掉,从而也就大大提升了识别的效率。不过基于Tire树的查找也有一个非常明显的缺点,那就是在查找的过程中路径如果断掉,识别的准确度有可能就会受到影响,因为针对字符描述字典所建立的Tire树的基础数据来自于千变万化的图片像素的颜色和坐标,而不是确定的且不会改变的单词,因此这就要求字典中的字符描述要尽可能的与待识别字符保持一致,而这恰恰又是“动态滑动窗口”算法以及之前的算法的长处,因为以计算相似度为基础的算法则完全不会受到这个因素的干扰。

后续的优化

        Tire树所加载的那些坐标数据其实可以通过机器学习的一些算法再处理一下,从而得到相应的模型,回归肯定不适合,因为这些数据是离散的,聚类倒是能处理这些离散的数据,但对于区分出字符也不太行,好像只有朴素贝叶斯能试试了。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值