Test Cases

The Problem Set requires a 100x200 grid (will be represented as 200x100/WxH here for visualization purposes).

In [48]:
%reload_ext autoreload
%autoreload 2
from pathfinding import grid, utils
from pathfinding.grid import viz

Test Case/Grid 1: The Random

In [43]:
polygons = [
    [(5, 32), (31, 64), (67, 65), (69, 33), (45, 8)],
    [(60, 3), (80, 1), (85, 7), (83, 14)],
    [(80, 32), (102, 12), (132, 8), (148, 45), (92, 28)],
    [(90, 35), (100, 70), (130, 40)],
    [(75, 60), (60, 80), (73, 94), (95, 80)],
    [(100, 80), (130, 97), (180, 70), (160, 40)],
    [(150, 30), (190, 30), (170, 45)],
    [(150, 10), (190, 5), (150, 5)],
    [(140, 20), (165, 18), (160, 25), (140, 25)],
    [(170, 20), (198, 10), (190, 28), (165, 25)],
    [(167, 50), (198, 45), (190, 60)],
    [(80, 50), (90, 50), (90, 40)],
    [(70, 50), (80, 50), (70, 40)],
    [(40, 80), (30, 99), (20, 50)]
]
maze, start, end = grid.generate(200, 100, polygons), (2, 2), (197, 97)

img_array = viz.generate_image(maze, start, end)
utils.render_image(img_array)

Test Case/Grid 2: The Maze-y

In [58]:
polygons = [[(140, 91), (137, 91), (137, 92), (140, 92)], [(144, 91), (141, 91), (141, 92), (144, 92)], [(143, 87), (143, 90), (144, 90), (144, 87)], [(139, 87), (142, 87), (142, 88), (139, 88)], [(139, 83), (139, 86), (140, 86), (140, 83)], [(139, 79), (139, 82), (140, 82), (140, 79)], [(144, 79), (141, 79), (141, 80), (144, 80)], [(143, 75), (143, 78), (144, 78), (144, 75)], [(148, 75), (145, 75), (145, 76), (148, 76)], [(147, 71), (147, 74), (148, 74), (148, 71)], [(152, 71), (149, 71), (149, 72), (152, 72)], [(151, 76), (151, 73), (152, 73), (152, 76)], [(156, 75), (153, 75), (153, 76), (156, 76)], [(155, 71), (155, 74), (156, 74), (156, 71)], [(155, 67), (155, 70), (156, 70), (156, 67)], [(155, 63), (155, 66), (156, 66), (156, 63)], [(155, 59), (155, 62), (156, 62), (156, 59)], [(160, 59), (157, 59), (157, 60), (160, 60)], [(159, 64), (159, 61), (160, 61), (160, 64)], [(159, 68), (159, 65), (160, 65), (160, 68)], [(159, 72), (159, 69), (160, 69), (160, 72)], [(164, 71), (161, 71), (161, 72), (164, 72)], [(168, 71), (165, 71), (165, 72), (168, 72)], [(172, 71), (169, 71), (169, 72), (172, 72)], [(171, 67), (171, 70), (172, 70), (172, 67)], [(171, 63), (171, 66), (172, 66), (172, 63)], [(176, 63), (173, 63), (173, 64), (176, 64)], [(175, 68), (175, 65), (176, 65), (176, 68)], [(175, 72), (175, 69), (176, 69), (176, 72)], [(175, 76), (175, 73), (176, 73), (176, 76)], [(175, 80), (175, 77), (176, 77), (176, 80)], [(175, 84), (175, 81), (176, 81), (176, 84)], [(175, 88), (175, 85), (176, 85), (176, 88)], [(171, 87), (174, 87), (174, 88), (171, 88)], [(171, 83), (171, 86), (172, 86), (172, 83)], [(167, 83), (170, 83), (170, 84), (167, 84)], [(163, 83), (166, 83), (166, 84), (163, 84)], [(163, 79), (163, 82), (164, 82), (164, 79)], [(163, 75), (163, 78), (164, 78), (164, 75)], [(168, 75), (165, 75), (165, 76), (168, 76)], [(167, 80), (167, 77), (168, 77), (168, 80)], [(172, 79), (169, 79), (169, 80), (172, 80)], [(171, 75), (171, 78), (172, 78), (172, 75)], [(71, 20), (71, 17), (72, 17), (72, 20)], [(67, 19), (70, 19), (70, 20), (67, 20)], [(63, 19), (66, 19), (66, 20), (63, 20)], [(63, 24), (63, 21), (64, 21), (64, 24)], [(59, 23), (62, 23), (62, 24), (59, 24)], [(55, 23), (58, 23), (58, 24), (55, 24)], [(55, 19), (55, 22), (56, 22), (56, 19)], [(60, 19), (57, 19), (57, 20), (60, 20)], [(59, 15), (59, 18), (60, 18), (60, 15)], [(59, 11), (59, 14), (60, 14), (60, 11)], [(55, 11), (58, 11), (58, 12), (55, 12)], [(51, 11), (54, 11), (54, 12), (51, 12)], [(51, 16), (51, 13), (52, 13), (52, 16)], [(51, 20), (51, 17), (52, 17), (52, 20)], [(47, 19), (50, 19), (50, 20), (47, 20)], [(43, 19), (46, 19), (46, 20), (43, 20)], [(39, 19), (42, 19), (42, 20), (39, 20)], [(39, 24), (39, 21), (40, 21), (40, 24)], [(44, 23), (41, 23), (41, 24), (44, 24)], [(43, 28), (43, 25), (44, 25), (44, 28)], [(43, 32), (43, 29), (44, 29), (44, 32)], [(48, 31), (45, 31), (45, 32), (48, 32)], [(52, 31), (49, 31), (49, 32), (52, 32)], [(51, 27), (51, 30), (52, 30), (52, 27)], [(51, 23), (51, 26), (52, 26), (52, 23)], [(47, 23), (50, 23), (50, 24), (47, 24)], [(47, 28), (47, 25), (48, 25), (48, 28)], [(191, 76), (191, 73), (192, 73), (192, 76)], [(187, 75), (190, 75), (190, 76), (187, 76)], [(187, 71), (187, 74), (188, 74), (188, 71)], [(187, 67), (187, 70), (188, 70), (188, 67)], [(192, 67), (189, 67), (189, 68), (192, 68)], [(191, 63), (191, 66), (192, 66), (192, 63)], [(196, 63), (193, 63), (193, 64), (196, 64)], [(195, 59), (195, 62), (196, 62), (196, 59)], [(195, 55), (195, 58), (196, 58), (196, 55)], [(191, 55), (194, 55), (194, 56), (191, 56)], [(187, 55), (190, 55), (190, 56), (187, 56)], [(187, 51), (187, 54), (188, 54), (188, 51)], [(192, 51), (189, 51), (189, 52), (192, 52)], [(191, 47), (191, 50), (192, 50), (192, 47)], [(187, 47), (190, 47), (190, 48), (187, 48)], [(183, 47), (186, 47), (186, 48), (183, 48)], [(183, 52), (183, 49), (184, 49), (184, 52)], [(183, 56), (183, 53), (184, 53), (184, 56)], [(179, 55), (182, 55), (182, 56), (179, 56)], [(175, 55), (178, 55), (178, 56), (175, 56)], [(175, 51), (175, 54), (176, 54), (176, 51)], [(180, 51), (177, 51), (177, 52), (180, 52)], [(179, 47), (179, 50), (180, 50), (180, 47)], [(179, 43), (179, 46), (180, 46), (180, 43)], [(184, 43), (181, 43), (181, 44), (184, 44)], [(188, 43), (185, 43), (185, 44), (188, 44)], [(187, 39), (187, 42), (188, 42), (188, 39)], [(183, 39), (186, 39), (186, 40), (183, 40)], [(179, 39), (182, 39), (182, 40), (179, 40)], [(175, 39), (178, 39), (178, 40), (175, 40)], [(175, 35), (175, 38), (176, 38), (176, 35)], [(171, 35), (174, 35), (174, 36), (171, 36)], [(171, 40), (171, 37), (172, 37), (172, 40)], [(171, 44), (171, 41), (172, 41), (172, 44)], [(167, 43), (170, 43), (170, 44), (167, 44)], [(163, 43), (166, 43), (166, 44), (163, 44)], [(163, 39), (163, 42), (164, 42), (164, 39)], [(159, 39), (162, 39), (162, 40), (159, 40)], [(159, 44), (159, 41), (160, 41), (160, 44)], [(155, 43), (158, 43), (158, 44), (155, 44)], [(155, 48), (155, 45), (156, 45), (156, 48)], [(151, 47), (154, 47), (154, 48), (151, 48)], [(147, 47), (150, 47), (150, 48), (147, 48)], [(147, 43), (147, 46), (148, 46), (148, 43)], [(147, 39), (147, 42), (148, 42), (148, 39)], [(152, 39), (149, 39), (149, 40), (152, 40)], [(151, 44), (151, 41), (152, 41), (152, 44)], [(75, 43), (75, 46), (76, 46), (76, 43)], [(80, 43), (77, 43), (77, 44), (80, 44)], [(79, 39), (79, 42), (80, 42), (80, 39)], [(79, 35), (79, 38), (80, 38), (80, 35)], [(75, 35), (78, 35), (78, 36), (75, 36)], [(75, 40), (75, 37), (76, 37), (76, 40)], [(71, 39), (74, 39), (74, 40), (71, 40)], [(67, 39), (70, 39), (70, 40), (67, 40)], [(63, 39), (66, 39), (66, 40), (63, 40)], [(59, 39), (62, 39), (62, 40), (59, 40)], [(55, 39), (58, 39), (58, 40), (55, 40)], [(55, 35), (55, 38), (56, 38), (56, 35)], [(55, 31), (55, 34), (56, 34), (56, 31)], [(55, 27), (55, 30), (56, 30), (56, 27)], [(60, 27), (57, 27), (57, 28), (60, 28)], [(64, 27), (61, 27), (61, 28), (64, 28)], [(68, 27), (65, 27), (65, 28), (68, 28)], [(67, 23), (67, 26), (68, 26), (68, 23)], [(72, 23), (69, 23), (69, 24), (72, 24)], [(76, 23), (73, 23), (73, 24), (76, 24)], [(75, 19), (75, 22), (76, 22), (76, 19)], [(80, 19), (77, 19), (77, 20), (80, 20)], [(84, 19), (81, 19), (81, 20), (84, 20)], [(83, 24), (83, 21), (84, 21), (84, 24)], [(88, 23), (85, 23), (85, 24), (88, 24)], [(92, 23), (89, 23), (89, 24), (92, 24)], [(96, 23), (93, 23), (93, 24), (96, 24)], [(95, 28), (95, 25), (96, 25), (96, 28)], [(91, 27), (94, 27), (94, 28), (91, 28)], [(87, 27), (90, 27), (90, 28), (87, 28)], [(87, 32), (87, 29), (88, 29), (88, 32)], [(87, 36), (87, 33), (88, 33), (88, 36)], [(92, 35), (89, 35), (89, 36), (92, 36)], [(91, 31), (91, 34), (92, 34), (92, 31)], [(96, 31), (93, 31), (93, 32), (96, 32)], [(95, 36), (95, 33), (96, 33), (96, 36)], [(95, 40), (95, 37), (96, 37), (96, 40)], [(95, 44), (95, 41), (96, 41), (96, 44)], [(95, 48), (95, 45), (96, 45), (96, 48)], [(91, 47), (94, 47), (94, 48), (91, 48)], [(91, 52), (91, 49), (92, 49), (92, 52)], [(96, 51), (93, 51), (93, 52), (96, 52)], [(100, 51), (97, 51), (97, 52), (100, 52)], [(99, 47), (99, 50), (100, 50), (100, 47)], [(104, 47), (101, 47), (101, 48), (104, 48)], [(103, 52), (103, 49), (104, 49), (104, 52)], [(103, 56), (103, 53), (104, 53), (104, 56)], [(103, 60), (103, 57), (104, 57), (104, 60)], [(103, 64), (103, 61), (104, 61), (104, 64)], [(99, 63), (102, 63), (102, 64), (99, 64)], [(95, 63), (98, 63), (98, 64), (95, 64)], [(91, 63), (94, 63), (94, 64), (91, 64)], [(91, 59), (91, 62), (92, 62), (92, 59)], [(91, 55), (91, 58), (92, 58), (92, 55)], [(96, 55), (93, 55), (93, 56), (96, 56)], [(95, 60), (95, 57), (96, 57), (96, 60)], [(100, 59), (97, 59), (97, 60), (100, 60)], [(99, 55), (99, 58), (100, 58), (100, 55)], [(115, 3), (115, 6), (116, 6), (116, 3)], [(111, 3), (114, 3), (114, 4), (111, 4)], [(111, 8), (111, 5), (112, 5), (112, 8)], [(111, 12), (111, 9), (112, 9), (112, 12)], [(111, 16), (111, 13), (112, 13), (112, 16)], [(111, 20), (111, 17), (112, 17), (112, 20)], [(111, 24), (111, 21), (112, 21), (112, 24)], [(111, 28), (111, 25), (112, 25), (112, 28)], [(107, 27), (110, 27), (110, 28), (107, 28)], [(107, 23), (107, 26), (108, 26), (108, 23)], [(103, 23), (106, 23), (106, 24), (103, 24)], [(99, 23), (102, 23), (102, 24), (99, 24)], [(99, 19), (99, 22), (100, 22), (100, 19)], [(95, 19), (98, 19), (98, 20), (95, 20)], [(95, 15), (95, 18), (96, 18), (96, 15)], [(100, 15), (97, 15), (97, 16), (100, 16)], [(104, 15), (101, 15), (101, 16), (104, 16)], [(103, 20), (103, 17), (104, 17), (104, 20)], [(108, 19), (105, 19), (105, 20), (108, 20)], [(107, 15), (107, 18), (108, 18), (108, 15)], [(107, 11), (107, 14), (108, 14), (108, 11)], [(103, 11), (106, 11), (106, 12), (103, 12)], [(99, 11), (102, 11), (102, 12), (99, 12)], [(95, 11), (98, 11), (98, 12), (95, 12)], [(95, 7), (95, 10), (96, 10), (96, 7)], [(91, 7), (94, 7), (94, 8), (91, 8)], [(91, 12), (91, 9), (92, 9), (92, 12)], [(91, 16), (91, 13), (92, 13), (92, 16)], [(87, 15), (90, 15), (90, 16), (87, 16)], [(83, 15), (86, 15), (86, 16), (83, 16)], [(79, 15), (82, 15), (82, 16), (79, 16)], [(75, 15), (78, 15), (78, 16), (75, 16)], [(75, 11), (75, 14), (76, 14), (76, 11)], [(75, 7), (75, 10), (76, 10), (76, 7)], [(71, 7), (74, 7), (74, 8), (71, 8)], [(71, 3), (71, 6), (72, 6), (72, 3)], [(76, 3), (73, 3), (73, 4), (76, 4)], [(80, 3), (77, 3), (77, 4), (80, 4)], [(79, 8), (79, 5), (80, 5), (80, 8)], [(79, 12), (79, 9), (80, 9), (80, 12)], [(84, 11), (81, 11), (81, 12), (84, 12)], [(88, 11), (85, 11), (85, 12), (88, 12)], [(87, 7), (87, 10), (88, 10), (88, 7)], [(87, 3), (87, 6), (88, 6), (88, 3)], [(92, 3), (89, 3), (89, 4), (92, 4)], [(96, 3), (93, 3), (93, 4), (96, 4)], [(100, 3), (97, 3), (97, 4), (100, 4)], [(99, 8), (99, 5), (100, 5), (100, 8)], [(104, 7), (101, 7), (101, 8), (104, 8)], [(108, 7), (105, 7), (105, 8), (108, 8)], [(107, 3), (107, 6), (108, 6), (108, 3)], [(103, 3), (106, 3), (106, 4), (103, 4)], [(64, 95), (61, 95), (61, 96), (64, 96)], [(68, 95), (65, 95), (65, 96), (68, 96)], [(67, 91), (67, 94), (68, 94), (68, 91)], [(63, 91), (66, 91), (66, 92), (63, 92)], [(59, 91), (62, 91), (62, 92), (59, 92)], [(55, 91), (58, 91), (58, 92), (55, 92)], [(51, 91), (54, 91), (54, 92), (51, 92)], [(51, 96), (51, 93), (52, 93), (52, 96)], [(56, 95), (53, 95), (53, 96), (56, 96)], [(155, 95), (155, 98), (156, 98), (156, 95)], [(151, 95), (154, 95), (154, 96), (151, 96)], [(151, 91), (151, 94), (152, 94), (152, 91)], [(147, 91), (150, 91), (150, 92), (147, 92)], [(147, 96), (147, 93), (148, 93), (148, 96)], [(143, 95), (146, 95), (146, 96), (143, 96)], [(139, 95), (142, 95), (142, 96), (139, 96)], [(135, 95), (138, 95), (138, 96), (135, 96)], [(131, 95), (134, 95), (134, 96), (131, 96)], [(131, 91), (131, 94), (132, 94), (132, 91)], [(127, 91), (130, 91), (130, 92), (127, 92)], [(127, 96), (127, 93), (128, 93), (128, 96)], [(123, 95), (126, 95), (126, 96), (123, 96)], [(119, 95), (122, 95), (122, 96), (119, 96)], [(119, 91), (119, 94), (120, 94), (120, 91)], [(124, 91), (121, 91), (121, 92), (124, 92)], [(123, 87), (123, 90), (124, 90), (124, 87)], [(123, 83), (123, 86), (124, 86), (124, 83)], [(128, 83), (125, 83), (125, 84), (128, 84)], [(127, 79), (127, 82), (128, 82), (128, 79)], [(123, 79), (126, 79), (126, 80), (123, 80)], [(119, 79), (122, 79), (122, 80), (119, 80)], [(115, 79), (118, 79), (118, 80), (115, 80)], [(111, 79), (114, 79), (114, 80), (111, 80)], [(107, 79), (110, 79), (110, 80), (107, 80)], [(107, 84), (107, 81), (108, 81), (108, 84)], [(112, 83), (109, 83), (109, 84), (112, 84)], [(116, 83), (113, 83), (113, 84), (116, 84)], [(120, 83), (117, 83), (117, 84), (120, 84)], [(119, 88), (119, 85), (120, 85), (120, 88)], [(115, 87), (118, 87), (118, 88), (115, 88)], [(111, 87), (114, 87), (114, 88), (111, 88)], [(107, 87), (110, 87), (110, 88), (107, 88)], [(107, 92), (107, 89), (108, 89), (108, 92)], [(112, 91), (109, 91), (109, 92), (112, 92)], [(111, 96), (111, 93), (112, 93), (112, 96)], [(116, 95), (113, 95), (113, 96), (116, 96)], [(115, 91), (115, 94), (116, 94), (116, 91)], [(87, 59), (90, 59), (90, 60), (87, 60)], [(87, 64), (87, 61), (88, 61), (88, 64)], [(87, 68), (87, 65), (88, 65), (88, 68)], [(83, 67), (86, 67), (86, 68), (83, 68)], [(83, 72), (83, 69), (84, 69), (84, 72)], [(88, 71), (85, 71), (85, 72), (88, 72)], [(87, 76), (87, 73), (88, 73), (88, 76)], [(87, 80), (87, 77), (88, 77), (88, 80)], [(83, 79), (86, 79), (86, 80), (83, 80)], [(83, 75), (83, 78), (84, 78), (84, 75)], [(79, 75), (82, 75), (82, 76), (79, 76)], [(75, 75), (78, 75), (78, 76), (75, 76)], [(75, 80), (75, 77), (76, 77), (76, 80)], [(80, 79), (77, 79), (77, 80), (80, 80)], [(79, 84), (79, 81), (80, 81), (80, 84)], [(84, 83), (81, 83), (81, 84), (84, 84)], [(88, 83), (85, 83), (85, 84), (88, 84)], [(87, 88), (87, 85), (88, 85), (88, 88)], [(83, 87), (86, 87), (86, 88), (83, 88)], [(83, 92), (83, 89), (84, 89), (84, 92)], [(79, 91), (82, 91), (82, 92), (79, 92)], [(79, 96), (79, 93), (80, 93), (80, 96)], [(75, 95), (78, 95), (78, 96), (75, 96)], [(71, 95), (74, 95), (74, 96), (71, 96)], [(71, 91), (71, 94), (72, 94), (72, 91)], [(71, 87), (71, 90), (72, 90), (72, 87)], [(71, 83), (71, 86), (72, 86), (72, 83)], [(67, 83), (70, 83), (70, 84), (67, 84)], [(67, 88), (67, 85), (68, 85), (68, 88)], [(63, 87), (66, 87), (66, 88), (63, 88)], [(59, 87), (62, 87), (62, 88), (59, 88)], [(55, 87), (58, 87), (58, 88), (55, 88)], [(55, 83), (55, 86), (56, 86), (56, 83)], [(55, 79), (55, 82), (56, 82), (56, 79)], [(51, 79), (54, 79), (54, 80), (51, 80)], [(51, 75), (51, 78), (52, 78), (52, 75)], [(56, 75), (53, 75), (53, 76), (56, 76)], [(55, 71), (55, 74), (56, 74), (56, 71)], [(55, 67), (55, 70), (56, 70), (56, 67)], [(60, 67), (57, 67), (57, 68), (60, 68)], [(59, 72), (59, 69), (60, 69), (60, 72)], [(64, 71), (61, 71), (61, 72), (64, 72)], [(63, 76), (63, 73), (64, 73), (64, 76)], [(68, 75), (65, 75), (65, 76), (68, 76)], [(67, 80), (67, 77), (68, 77), (68, 80)], [(72, 79), (69, 79), (69, 80), (72, 80)], [(71, 75), (71, 78), (72, 78), (72, 75)], [(71, 71), (71, 74), (72, 74), (72, 71)], [(71, 67), (71, 70), (72, 70), (72, 67)], [(71, 63), (71, 66), (72, 66), (72, 63)], [(67, 63), (70, 63), (70, 64), (67, 64)], [(63, 63), (66, 63), (66, 64), (63, 64)], [(63, 59), (63, 62), (64, 62), (64, 59)], [(63, 55), (63, 58), (64, 58), (64, 55)], [(59, 55), (62, 55), (62, 56), (59, 56)], [(59, 60), (59, 57), (60, 57), (60, 60)], [(55, 59), (58, 59), (58, 60), (55, 60)], [(55, 55), (55, 58), (56, 58), (56, 55)], [(55, 51), (55, 54), (56, 54), (56, 51)], [(55, 47), (55, 50), (56, 50), (56, 47)], [(51, 47), (54, 47), (54, 48), (51, 48)], [(51, 52), (51, 49), (52, 49), (52, 52)], [(51, 56), (51, 53), (52, 53), (52, 56)], [(51, 60), (51, 57), (52, 57), (52, 60)], [(51, 64), (51, 61), (52, 61), (52, 64)], [(47, 63), (50, 63), (50, 64), (47, 64)], [(47, 68), (47, 65), (48, 65), (48, 68)], [(52, 67), (49, 67), (49, 68), (52, 68)], [(51, 72), (51, 69), (52, 69), (52, 72)], [(47, 71), (50, 71), (50, 72), (47, 72)], [(47, 76), (47, 73), (48, 73), (48, 76)], [(43, 75), (46, 75), (46, 76), (43, 76)], [(43, 80), (43, 77), (44, 77), (44, 80)], [(39, 79), (42, 79), (42, 80), (39, 80)], [(39, 75), (39, 78), (40, 78), (40, 75)], [(35, 75), (38, 75), (38, 76), (35, 76)], [(35, 71), (35, 74), (36, 74), (36, 71)], [(31, 71), (34, 71), (34, 72), (31, 72)], [(31, 76), (31, 73), (32, 73), (32, 76)], [(27, 75), (30, 75), (30, 76), (27, 76)], [(27, 80), (27, 77), (28, 77), (28, 80)], [(27, 84), (27, 81), (28, 81), (28, 84)], [(32, 83), (29, 83), (29, 84), (32, 84)], [(31, 79), (31, 82), (32, 82), (32, 79)], [(36, 79), (33, 79), (33, 80), (36, 80)], [(35, 84), (35, 81), (36, 81), (36, 84)], [(40, 83), (37, 83), (37, 84), (40, 84)], [(39, 88), (39, 85), (40, 85), (40, 88)], [(44, 87), (41, 87), (41, 88), (44, 88)], [(43, 83), (43, 86), (44, 86), (44, 83)], [(48, 83), (45, 83), (45, 84), (48, 84)], [(52, 83), (49, 83), (49, 84), (52, 84)], [(51, 88), (51, 85), (52, 85), (52, 88)], [(47, 87), (50, 87), (50, 88), (47, 88)], [(47, 92), (47, 89), (48, 89), (48, 92)], [(43, 91), (46, 91), (46, 92), (43, 92)], [(43, 96), (43, 93), (44, 93), (44, 96)], [(48, 95), (45, 95), (45, 96), (48, 96)], [(163, 67), (163, 70), (164, 70), (164, 67)], [(168, 67), (165, 67), (165, 68), (168, 68)], [(167, 63), (167, 66), (168, 66), (168, 63)], [(167, 59), (167, 62), (168, 62), (168, 59)], [(163, 59), (166, 59), (166, 60), (163, 60)], [(163, 55), (163, 58), (164, 58), (164, 55)], [(163, 51), (163, 54), (164, 54), (164, 51)], [(163, 47), (163, 50), (164, 50), (164, 47)], [(159, 47), (162, 47), (162, 48), (159, 48)], [(159, 52), (159, 49), (160, 49), (160, 52)], [(155, 51), (158, 51), (158, 52), (155, 52)], [(155, 56), (155, 53), (156, 53), (156, 56)], [(151, 55), (154, 55), (154, 56), (151, 56)], [(151, 51), (151, 54), (152, 54), (152, 51)], [(147, 51), (150, 51), (150, 52), (147, 52)], [(147, 56), (147, 53), (148, 53), (148, 56)], [(143, 55), (146, 55), (146, 56), (143, 56)], [(143, 60), (143, 57), (144, 57), (144, 60)], [(148, 59), (145, 59), (145, 60), (148, 60)], [(147, 64), (147, 61), (148, 61), (148, 64)], [(143, 63), (146, 63), (146, 64), (143, 64)], [(143, 68), (143, 65), (144, 65), (144, 68)], [(143, 72), (143, 69), (144, 69), (144, 72)], [(139, 71), (142, 71), (142, 72), (139, 72)], [(139, 76), (139, 73), (140, 73), (140, 76)], [(135, 75), (138, 75), (138, 76), (135, 76)], [(135, 71), (135, 74), (136, 74), (136, 71)], [(131, 71), (134, 71), (134, 72), (131, 72)], [(131, 67), (131, 70), (132, 70), (132, 67)], [(127, 67), (130, 67), (130, 68), (127, 68)], [(127, 63), (127, 66), (128, 66), (128, 63)], [(127, 59), (127, 62), (128, 62), (128, 59)], [(132, 59), (129, 59), (129, 60), (132, 60)], [(136, 59), (133, 59), (133, 60), (136, 60)], [(135, 64), (135, 61), (136, 61), (136, 64)], [(131, 63), (134, 63), (134, 64), (131, 64)], [(39, 43), (42, 43), (42, 44), (39, 44)], [(39, 48), (39, 45), (40, 45), (40, 48)], [(39, 52), (39, 49), (40, 49), (40, 52)], [(39, 56), (39, 53), (40, 53), (40, 56)], [(39, 60), (39, 57), (40, 57), (40, 60)], [(35, 59), (38, 59), (38, 60), (35, 60)], [(31, 59), (34, 59), (34, 60), (31, 60)], [(27, 59), (30, 59), (30, 60), (27, 60)], [(23, 59), (26, 59), (26, 60), (23, 60)], [(19, 59), (22, 59), (22, 60), (19, 60)], [(19, 64), (19, 61), (20, 61), (20, 64)], [(15, 63), (18, 63), (18, 64), (15, 64)], [(15, 68), (15, 65), (16, 65), (16, 68)], [(15, 72), (15, 69), (16, 69), (16, 72)], [(15, 76), (15, 73), (16, 73), (16, 76)], [(20, 75), (17, 75), (17, 76), (20, 76)], [(19, 71), (19, 74), (20, 74), (20, 71)], [(24, 71), (21, 71), (21, 72), (24, 72)], [(23, 67), (23, 70), (24, 70), (24, 67)], [(28, 67), (25, 67), (25, 68), (28, 68)], [(32, 67), (29, 67), (29, 68), (32, 68)], [(36, 67), (33, 67), (33, 68), (36, 68)], [(40, 67), (37, 67), (37, 68), (40, 68)], [(39, 63), (39, 66), (40, 66), (40, 63)], [(44, 63), (41, 63), (41, 64), (44, 64)], [(43, 59), (43, 62), (44, 62), (44, 59)], [(43, 55), (43, 58), (44, 58), (44, 55)], [(43, 51), (43, 54), (44, 54), (44, 51)], [(48, 51), (45, 51), (45, 52), (48, 52)], [(47, 56), (47, 53), (48, 53), (48, 56)], [(47, 60), (47, 57), (48, 57), (48, 60)], [(131, 55), (131, 58), (132, 58), (132, 55)], [(131, 51), (131, 54), (132, 54), (132, 51)], [(131, 47), (131, 50), (132, 50), (132, 47)], [(127, 47), (130, 47), (130, 48), (127, 48)], [(127, 52), (127, 49), (128, 49), (128, 52)], [(127, 56), (127, 53), (128, 53), (128, 56)], [(123, 55), (126, 55), (126, 56), (123, 56)], [(123, 51), (123, 54), (124, 54), (124, 51)], [(119, 51), (122, 51), (122, 52), (119, 52)], [(115, 51), (118, 51), (118, 52), (115, 52)], [(111, 51), (114, 51), (114, 52), (111, 52)], [(111, 56), (111, 53), (112, 53), (112, 56)], [(107, 55), (110, 55), (110, 56), (107, 56)], [(107, 51), (107, 54), (108, 54), (108, 51)], [(107, 47), (107, 50), (108, 50), (108, 47)], [(107, 43), (107, 46), (108, 46), (108, 43)], [(103, 43), (106, 43), (106, 44), (103, 44)], [(99, 43), (102, 43), (102, 44), (99, 44)], [(99, 39), (99, 42), (100, 42), (100, 39)], [(104, 39), (101, 39), (101, 40), (104, 40)], [(108, 39), (105, 39), (105, 40), (108, 40)], [(112, 39), (109, 39), (109, 40), (112, 40)], [(111, 44), (111, 41), (112, 41), (112, 44)], [(116, 43), (113, 43), (113, 44), (116, 44)], [(120, 43), (117, 43), (117, 44), (120, 44)], [(124, 43), (121, 43), (121, 44), (124, 44)], [(128, 43), (125, 43), (125, 44), (128, 44)], [(132, 43), (129, 43), (129, 44), (132, 44)], [(131, 39), (131, 42), (132, 42), (132, 39)], [(127, 39), (130, 39), (130, 40), (127, 40)], [(123, 39), (126, 39), (126, 40), (123, 40)], [(119, 39), (122, 39), (122, 40), (119, 40)], [(115, 39), (118, 39), (118, 40), (115, 40)], [(115, 35), (115, 38), (116, 38), (116, 35)], [(115, 31), (115, 34), (116, 34), (116, 31)], [(115, 27), (115, 30), (116, 30), (116, 27)], [(115, 23), (115, 26), (116, 26), (116, 23)], [(120, 23), (117, 23), (117, 24), (120, 24)], [(119, 28), (119, 25), (120, 25), (120, 28)], [(119, 32), (119, 29), (120, 29), (120, 32)], [(119, 36), (119, 33), (120, 33), (120, 36)], [(124, 35), (121, 35), (121, 36), (124, 36)], [(128, 35), (125, 35), (125, 36), (128, 36)], [(127, 31), (127, 34), (128, 34), (128, 31)], [(123, 31), (126, 31), (126, 32), (123, 32)], [(123, 27), (123, 30), (124, 30), (124, 27)], [(123, 23), (123, 26), (124, 26), (124, 23)], [(128, 23), (125, 23), (125, 24), (128, 24)], [(127, 19), (127, 22), (128, 22), (128, 19)], [(127, 15), (127, 18), (128, 18), (128, 15)], [(132, 15), (129, 15), (129, 16), (132, 16)], [(136, 15), (133, 15), (133, 16), (136, 16)], [(140, 15), (137, 15), (137, 16), (140, 16)], [(139, 11), (139, 14), (140, 14), (140, 11)], [(144, 11), (141, 11), (141, 12), (144, 12)], [(143, 16), (143, 13), (144, 13), (144, 16)], [(148, 15), (145, 15), (145, 16), (148, 16)], [(147, 11), (147, 14), (148, 14), (148, 11)], [(152, 11), (149, 11), (149, 12), (152, 12)], [(151, 16), (151, 13), (152, 13), (152, 16)], [(156, 15), (153, 15), (153, 16), (156, 16)], [(155, 20), (155, 17), (156, 17), (156, 20)], [(151, 19), (154, 19), (154, 20), (151, 20)], [(151, 24), (151, 21), (152, 21), (152, 24)], [(147, 23), (150, 23), (150, 24), (147, 24)], [(143, 23), (146, 23), (146, 24), (143, 24)], [(143, 28), (143, 25), (144, 25), (144, 28)], [(148, 27), (145, 27), (145, 28), (148, 28)], [(147, 32), (147, 29), (148, 29), (148, 32)], [(143, 31), (146, 31), (146, 32), (143, 32)], [(139, 31), (142, 31), (142, 32), (139, 32)], [(139, 27), (139, 30), (140, 30), (140, 27)], [(139, 23), (139, 26), (140, 26), (140, 23)], [(135, 23), (138, 23), (138, 24), (135, 24)], [(131, 23), (134, 23), (134, 24), (131, 24)], [(131, 19), (131, 22), (132, 22), (132, 19)], [(136, 19), (133, 19), (133, 20), (136, 20)], [(140, 19), (137, 19), (137, 20), (140, 20)], [(144, 19), (141, 19), (141, 20), (144, 20)], [(148, 19), (145, 19), (145, 20), (148, 20)], [(164, 63), (161, 63), (161, 64), (164, 64)], [(67, 43), (70, 43), (70, 44), (67, 44)], [(63, 43), (66, 43), (66, 44), (63, 44)], [(59, 43), (62, 43), (62, 44), (59, 44)], [(59, 48), (59, 45), (60, 45), (60, 48)], [(64, 47), (61, 47), (61, 48), (64, 48)], [(68, 47), (65, 47), (65, 48), (68, 48)], [(72, 47), (69, 47), (69, 48), (72, 48)], [(71, 52), (71, 49), (72, 49), (72, 52)], [(76, 51), (73, 51), (73, 52), (76, 52)], [(80, 51), (77, 51), (77, 52), (80, 52)], [(79, 47), (79, 50), (80, 50), (80, 47)], [(84, 47), (81, 47), (81, 48), (84, 48)], [(83, 52), (83, 49), (84, 49), (84, 52)], [(88, 51), (85, 51), (85, 52), (88, 52)], [(87, 47), (87, 50), (88, 50), (88, 47)], [(87, 43), (87, 46), (88, 46), (88, 43)], [(83, 43), (86, 43), (86, 44), (83, 44)], [(83, 39), (83, 42), (84, 42), (84, 39)], [(88, 39), (85, 39), (85, 40), (88, 40)], [(92, 39), (89, 39), (89, 40), (92, 40)], [(91, 44), (91, 41), (92, 41), (92, 44)], [(143, 3), (143, 6), (144, 6), (144, 3)], [(139, 3), (142, 3), (142, 4), (139, 4)], [(135, 3), (138, 3), (138, 4), (135, 4)], [(135, 8), (135, 5), (136, 5), (136, 8)], [(135, 12), (135, 9), (136, 9), (136, 12)], [(131, 11), (134, 11), (134, 12), (131, 12)], [(131, 7), (131, 10), (132, 10), (132, 7)], [(131, 3), (131, 6), (132, 6), (132, 3)], [(127, 3), (130, 3), (130, 4), (127, 4)], [(123, 3), (126, 3), (126, 4), (123, 4)], [(119, 3), (122, 3), (122, 4), (119, 4)], [(119, 8), (119, 5), (120, 5), (120, 8)], [(119, 12), (119, 9), (120, 9), (120, 12)], [(124, 11), (121, 11), (121, 12), (124, 12)], [(123, 7), (123, 10), (124, 10), (124, 7)], [(128, 7), (125, 7), (125, 8), (128, 8)], [(127, 12), (127, 9), (128, 9), (128, 12)], [(135, 31), (138, 31), (138, 32), (135, 32)], [(135, 36), (135, 33), (136, 33), (136, 36)], [(135, 40), (135, 37), (136, 37), (136, 40)], [(140, 39), (137, 39), (137, 40), (140, 40)], [(144, 39), (141, 39), (141, 40), (144, 40)], [(143, 44), (143, 41), (144, 41), (144, 44)], [(139, 43), (142, 43), (142, 44), (139, 44)], [(139, 48), (139, 45), (140, 45), (140, 48)], [(144, 47), (141, 47), (141, 48), (144, 48)], [(143, 52), (143, 49), (144, 49), (144, 52)], [(139, 51), (142, 51), (142, 52), (139, 52)], [(139, 56), (139, 53), (140, 53), (140, 56)], [(135, 55), (138, 55), (138, 56), (135, 56)], [(135, 51), (135, 54), (136, 54), (136, 51)], [(135, 47), (135, 50), (136, 50), (136, 47)], [(135, 43), (135, 46), (136, 46), (136, 43)], [(171, 15), (171, 18), (172, 18), (172, 15)], [(176, 15), (173, 15), (173, 16), (176, 16)], [(175, 20), (175, 17), (176, 17), (176, 20)], [(175, 24), (175, 21), (176, 21), (176, 24)], [(175, 28), (175, 25), (176, 25), (176, 28)], [(175, 32), (175, 29), (176, 29), (176, 32)], [(171, 31), (174, 31), (174, 32), (171, 32)], [(171, 27), (171, 30), (172, 30), (172, 27)], [(167, 27), (170, 27), (170, 28), (167, 28)], [(167, 32), (167, 29), (168, 29), (168, 32)], [(167, 36), (167, 33), (168, 33), (168, 36)], [(167, 40), (167, 37), (168, 37), (168, 40)], [(107, 95), (107, 98), (108, 98), (108, 95)], [(103, 95), (106, 95), (106, 96), (103, 96)], [(99, 95), (102, 95), (102, 96), (99, 96)], [(95, 95), (98, 95), (98, 96), (95, 96)], [(91, 95), (94, 95), (94, 96), (91, 96)], [(91, 91), (91, 94), (92, 94), (92, 91)], [(91, 87), (91, 90), (92, 90), (92, 87)], [(91, 83), (91, 86), (92, 86), (92, 83)], [(91, 79), (91, 82), (92, 82), (92, 79)], [(96, 79), (93, 79), (93, 80), (96, 80)], [(95, 75), (95, 78), (96, 78), (96, 75)], [(100, 75), (97, 75), (97, 76), (100, 76)], [(104, 75), (101, 75), (101, 76), (104, 76)], [(103, 71), (103, 74), (104, 74), (104, 71)], [(103, 67), (103, 70), (104, 70), (104, 67)], [(108, 67), (105, 67), (105, 68), (108, 68)], [(107, 72), (107, 69), (108, 69), (108, 72)], [(112, 71), (109, 71), (109, 72), (112, 72)], [(111, 67), (111, 70), (112, 70), (112, 67)], [(111, 63), (111, 66), (112, 66), (112, 63)], [(116, 63), (113, 63), (113, 64), (116, 64)], [(120, 63), (117, 63), (117, 64), (120, 64)], [(119, 68), (119, 65), (120, 65), (120, 68)], [(119, 72), (119, 69), (120, 69), (120, 72)], [(124, 71), (121, 71), (121, 72), (124, 72)], [(128, 71), (125, 71), (125, 72), (128, 72)], [(127, 76), (127, 73), (128, 73), (128, 76)], [(123, 75), (126, 75), (126, 76), (123, 76)], [(119, 75), (122, 75), (122, 76), (119, 76)], [(115, 75), (118, 75), (118, 76), (115, 76)], [(115, 71), (115, 74), (116, 74), (116, 71)], [(115, 67), (115, 70), (116, 70), (116, 67)], [(108, 59), (105, 59), (105, 60), (108, 60)], [(112, 59), (109, 59), (109, 60), (112, 60)], [(116, 59), (113, 59), (113, 60), (116, 60)], [(115, 55), (115, 58), (116, 58), (116, 55)], [(120, 55), (117, 55), (117, 56), (120, 56)], [(119, 60), (119, 57), (120, 57), (120, 60)], [(124, 59), (121, 59), (121, 60), (124, 60)], [(123, 64), (123, 61), (124, 61), (124, 64)], [(123, 68), (123, 65), (124, 65), (124, 68)], [(15, 59), (15, 62), (16, 62), (16, 59)], [(11, 59), (14, 59), (14, 60), (11, 60)], [(7, 59), (10, 59), (10, 60), (7, 60)], [(3, 59), (6, 59), (6, 60), (3, 60)], [(3, 64), (3, 61), (4, 61), (4, 64)], [(3, 68), (3, 65), (4, 65), (4, 68)], [(8, 67), (5, 67), (5, 68), (8, 68)], [(12, 67), (9, 67), (9, 68), (12, 68)], [(11, 63), (11, 66), (12, 66), (12, 63)], [(7, 63), (10, 63), (10, 64), (7, 64)], [(196, 67), (193, 67), (193, 68), (196, 68)], [(195, 72), (195, 69), (196, 69), (196, 72)], [(195, 76), (195, 73), (196, 73), (196, 76)], [(195, 80), (195, 77), (196, 77), (196, 80)], [(191, 79), (194, 79), (194, 80), (191, 80)], [(191, 84), (191, 81), (192, 81), (192, 84)], [(187, 83), (190, 83), (190, 84), (187, 84)], [(183, 83), (186, 83), (186, 84), (183, 84)], [(179, 83), (182, 83), (182, 84), (179, 84)], [(179, 88), (179, 85), (180, 85), (180, 88)], [(179, 92), (179, 89), (180, 89), (180, 92)], [(184, 91), (181, 91), (181, 92), (184, 92)], [(188, 91), (185, 91), (185, 92), (188, 92)], [(187, 96), (187, 93), (188, 93), (188, 96)], [(192, 95), (189, 95), (189, 96), (192, 96)], [(191, 91), (191, 94), (192, 94), (192, 91)], [(196, 91), (193, 91), (193, 92), (196, 92)], [(195, 87), (195, 90), (196, 90), (196, 87)], [(191, 87), (194, 87), (194, 88), (191, 88)], [(187, 87), (190, 87), (190, 88), (187, 88)], [(183, 87), (186, 87), (186, 88), (183, 88)], [(135, 28), (135, 25), (136, 25), (136, 28)], [(131, 27), (134, 27), (134, 28), (131, 28)], [(131, 32), (131, 29), (132, 29), (132, 32)], [(131, 36), (131, 33), (132, 33), (132, 36)], [(187, 63), (187, 66), (188, 66), (188, 63)], [(183, 63), (186, 63), (186, 64), (183, 64)], [(179, 63), (182, 63), (182, 64), (179, 64)], [(179, 59), (179, 62), (180, 62), (180, 59)], [(175, 59), (178, 59), (178, 60), (175, 60)], [(171, 59), (174, 59), (174, 60), (171, 60)], [(171, 55), (171, 58), (172, 58), (172, 55)], [(167, 55), (170, 55), (170, 56), (167, 56)], [(167, 51), (167, 54), (168, 54), (168, 51)], [(172, 51), (169, 51), (169, 52), (172, 52)], [(171, 47), (171, 50), (172, 50), (172, 47)], [(176, 47), (173, 47), (173, 48), (176, 48)], [(175, 43), (175, 46), (176, 46), (176, 43)], [(84, 27), (81, 27), (81, 28), (84, 28)], [(83, 32), (83, 29), (84, 29), (84, 32)], [(79, 31), (82, 31), (82, 32), (79, 32)], [(75, 31), (78, 31), (78, 32), (75, 32)], [(71, 31), (74, 31), (74, 32), (71, 32)], [(67, 31), (70, 31), (70, 32), (67, 32)], [(67, 36), (67, 33), (68, 33), (68, 36)], [(63, 35), (66, 35), (66, 36), (63, 36)], [(63, 31), (63, 34), (64, 34), (64, 31)], [(59, 31), (62, 31), (62, 32), (59, 32)], [(59, 36), (59, 33), (60, 33), (60, 36)], [(147, 87), (147, 90), (148, 90), (148, 87)], [(152, 87), (149, 87), (149, 88), (152, 88)], [(151, 83), (151, 86), (152, 86), (152, 83)], [(147, 83), (150, 83), (150, 84), (147, 84)], [(147, 79), (147, 82), (148, 82), (148, 79)], [(152, 79), (149, 79), (149, 80), (152, 80)], [(156, 79), (153, 79), (153, 80), (156, 80)], [(155, 84), (155, 81), (156, 81), (156, 84)], [(155, 88), (155, 85), (156, 85), (156, 88)], [(155, 92), (155, 89), (156, 89), (156, 92)], [(160, 91), (157, 91), (157, 92), (160, 92)], [(164, 91), (161, 91), (161, 92), (164, 92)], [(163, 87), (163, 90), (164, 90), (164, 87)], [(168, 87), (165, 87), (165, 88), (168, 88)], [(167, 92), (167, 89), (168, 89), (168, 92)], [(167, 96), (167, 93), (168, 93), (168, 96)], [(163, 95), (166, 95), (166, 96), (163, 96)], [(159, 95), (162, 95), (162, 96), (159, 96)], [(175, 92), (175, 89), (176, 89), (176, 92)], [(171, 91), (174, 91), (174, 92), (171, 92)], [(171, 96), (171, 93), (172, 93), (172, 96)], [(176, 95), (173, 95), (173, 96), (176, 96)], [(180, 95), (177, 95), (177, 96), (180, 96)], [(184, 95), (181, 95), (181, 96), (184, 96)], [(183, 35), (183, 38), (184, 38), (184, 35)], [(179, 35), (182, 35), (182, 36), (179, 36)], [(179, 31), (179, 34), (180, 34), (180, 31)], [(179, 27), (179, 30), (180, 30), (180, 27)], [(184, 27), (181, 27), (181, 28), (184, 28)], [(183, 23), (183, 26), (184, 26), (184, 23)], [(188, 23), (185, 23), (185, 24), (188, 24)], [(187, 28), (187, 25), (188, 25), (188, 28)], [(187, 32), (187, 29), (188, 29), (188, 32)], [(187, 36), (187, 33), (188, 33), (188, 36)], [(192, 35), (189, 35), (189, 36), (192, 36)], [(191, 40), (191, 37), (192, 37), (192, 40)], [(196, 39), (193, 39), (193, 40), (196, 40)], [(195, 35), (195, 38), (196, 38), (196, 35)], [(195, 31), (195, 34), (196, 34), (196, 31)], [(195, 27), (195, 30), (196, 30), (196, 27)], [(191, 27), (194, 27), (194, 28), (191, 28)], [(191, 32), (191, 29), (192, 29), (192, 32)], [(163, 32), (163, 29), (164, 29), (164, 32)], [(159, 31), (162, 31), (162, 32), (159, 32)], [(159, 27), (159, 30), (160, 30), (160, 27)], [(159, 23), (159, 26), (160, 26), (160, 23)], [(155, 23), (158, 23), (158, 24), (155, 24)], [(155, 28), (155, 25), (156, 25), (156, 28)], [(155, 32), (155, 29), (156, 29), (156, 32)], [(155, 36), (155, 33), (156, 33), (156, 36)], [(155, 40), (155, 37), (156, 37), (156, 40)], [(160, 83), (157, 83), (157, 84), (160, 84)], [(159, 79), (159, 82), (160, 82), (160, 79)], [(159, 75), (159, 78), (160, 78), (160, 75)], [(160, 87), (157, 87), (157, 88), (160, 88)], [(39, 15), (39, 18), (40, 18), (40, 15)], [(35, 15), (38, 15), (38, 16), (35, 16)], [(35, 20), (35, 17), (36, 17), (36, 20)], [(35, 24), (35, 21), (36, 21), (36, 24)], [(35, 28), (35, 25), (36, 25), (36, 28)], [(31, 27), (34, 27), (34, 28), (31, 28)], [(31, 32), (31, 29), (32, 29), (32, 32)], [(36, 31), (33, 31), (33, 32), (36, 32)], [(35, 36), (35, 33), (36, 33), (36, 36)], [(40, 35), (37, 35), (37, 36), (40, 36)], [(39, 40), (39, 37), (40, 37), (40, 40)], [(44, 39), (41, 39), (41, 40), (44, 40)], [(43, 35), (43, 38), (44, 38), (44, 35)], [(48, 35), (45, 35), (45, 36), (48, 36)], [(47, 40), (47, 37), (48, 37), (48, 40)], [(52, 39), (49, 39), (49, 40), (52, 40)], [(51, 35), (51, 38), (52, 38), (52, 35)], [(100, 31), (97, 31), (97, 32), (100, 32)], [(104, 31), (101, 31), (101, 32), (104, 32)], [(103, 36), (103, 33), (104, 33), (104, 36)], [(99, 35), (102, 35), (102, 36), (99, 36)], [(23, 84), (23, 81), (24, 81), (24, 84)], [(19, 83), (22, 83), (22, 84), (19, 84)], [(19, 88), (19, 85), (20, 85), (20, 88)], [(15, 87), (18, 87), (18, 88), (15, 88)], [(15, 83), (15, 86), (16, 86), (16, 83)], [(11, 83), (14, 83), (14, 84), (11, 84)], [(11, 79), (11, 82), (12, 82), (12, 79)], [(16, 79), (13, 79), (13, 80), (16, 80)], [(20, 79), (17, 79), (17, 80), (20, 80)], [(76, 83), (73, 83), (73, 84), (76, 84)], [(75, 88), (75, 85), (76, 85), (76, 88)], [(80, 87), (77, 87), (77, 88), (80, 88)], [(35, 87), (38, 87), (38, 88), (35, 88)], [(35, 92), (35, 89), (36, 89), (36, 92)], [(35, 96), (35, 93), (36, 93), (36, 96)], [(40, 95), (37, 95), (37, 96), (40, 96)], [(39, 91), (39, 94), (40, 94), (40, 91)], [(4, 51), (1, 51), (1, 52), (4, 52)], [(3, 47), (3, 50), (4, 50), (4, 47)], [(3, 43), (3, 46), (4, 46), (4, 43)], [(3, 39), (3, 42), (4, 42), (4, 39)], [(8, 39), (5, 39), (5, 40), (8, 40)], [(7, 44), (7, 41), (8, 41), (8, 44)], [(12, 43), (9, 43), (9, 44), (12, 44)], [(11, 48), (11, 45), (12, 45), (12, 48)], [(16, 47), (13, 47), (13, 48), (16, 48)], [(15, 43), (15, 46), (16, 46), (16, 43)], [(15, 39), (15, 42), (16, 42), (16, 39)], [(15, 35), (15, 38), (16, 38), (16, 35)], [(20, 35), (17, 35), (17, 36), (20, 36)], [(19, 31), (19, 34), (20, 34), (20, 31)], [(24, 31), (21, 31), (21, 32), (24, 32)], [(23, 27), (23, 30), (24, 30), (24, 27)], [(23, 23), (23, 26), (24, 26), (24, 23)], [(19, 23), (22, 23), (22, 24), (19, 24)], [(19, 19), (19, 22), (20, 22), (20, 19)], [(19, 15), (19, 18), (20, 18), (20, 15)], [(19, 11), (19, 14), (20, 14), (20, 11)], [(15, 11), (18, 11), (18, 12), (15, 12)], [(15, 7), (15, 10), (16, 10), (16, 7)], [(11, 7), (14, 7), (14, 8), (11, 8)], [(11, 12), (11, 9), (12, 9), (12, 12)], [(11, 16), (11, 13), (12, 13), (12, 16)], [(16, 15), (13, 15), (13, 16), (16, 16)], [(15, 20), (15, 17), (16, 17), (16, 20)], [(11, 19), (14, 19), (14, 20), (11, 20)], [(7, 19), (10, 19), (10, 20), (7, 20)], [(7, 15), (7, 18), (8, 18), (8, 15)], [(7, 11), (7, 14), (8, 14), (8, 11)], [(7, 7), (7, 10), (8, 10), (8, 7)], [(7, 3), (7, 6), (8, 6), (8, 3)], [(12, 3), (9, 3), (9, 4), (12, 4)], [(16, 3), (13, 3), (13, 4), (16, 4)], [(20, 3), (17, 3), (17, 4), (20, 4)], [(19, 8), (19, 5), (20, 5), (20, 8)], [(24, 7), (21, 7), (21, 8), (24, 8)], [(28, 7), (25, 7), (25, 8), (28, 8)], [(27, 12), (27, 9), (28, 9), (28, 12)], [(23, 11), (26, 11), (26, 12), (23, 12)], [(23, 16), (23, 13), (24, 13), (24, 16)], [(23, 20), (23, 17), (24, 17), (24, 20)], [(28, 19), (25, 19), (25, 20), (28, 20)], [(27, 24), (27, 21), (28, 21), (28, 24)], [(32, 23), (29, 23), (29, 24), (32, 24)], [(31, 19), (31, 22), (32, 22), (32, 19)], [(31, 15), (31, 18), (32, 18), (32, 15)], [(31, 11), (31, 14), (32, 14), (32, 11)], [(31, 7), (31, 10), (32, 10), (32, 7)], [(31, 3), (31, 6), (32, 6), (32, 3)], [(36, 3), (33, 3), (33, 4), (36, 4)], [(35, 8), (35, 5), (36, 5), (36, 8)], [(35, 12), (35, 9), (36, 9), (36, 12)], [(40, 11), (37, 11), (37, 12), (40, 12)], [(39, 7), (39, 10), (40, 10), (40, 7)], [(44, 7), (41, 7), (41, 8), (44, 8)], [(43, 12), (43, 9), (44, 9), (44, 12)], [(43, 16), (43, 13), (44, 13), (44, 16)], [(48, 15), (45, 15), (45, 16), (48, 16)], [(47, 11), (47, 14), (48, 14), (48, 11)], [(47, 7), (47, 10), (48, 10), (48, 7)], [(47, 3), (47, 6), (48, 6), (48, 3)], [(52, 3), (49, 3), (49, 4), (52, 4)], [(51, 8), (51, 5), (52, 5), (52, 8)], [(56, 7), (53, 7), (53, 8), (56, 8)], [(55, 3), (55, 6), (56, 6), (56, 3)], [(60, 3), (57, 3), (57, 4), (60, 4)], [(64, 3), (61, 3), (61, 4), (64, 4)], [(68, 3), (65, 3), (65, 4), (68, 4)], [(67, 8), (67, 5), (68, 5), (68, 8)], [(63, 7), (66, 7), (66, 8), (63, 8)], [(59, 7), (62, 7), (62, 8), (59, 8)], [(84, 35), (81, 35), (81, 36), (84, 36)], [(191, 23), (194, 23), (194, 24), (191, 24)], [(191, 19), (191, 22), (192, 22), (192, 19)], [(191, 15), (191, 18), (192, 18), (192, 15)], [(191, 11), (191, 14), (192, 14), (192, 11)], [(191, 7), (191, 10), (192, 10), (192, 7)], [(196, 7), (193, 7), (193, 8), (196, 8)], [(195, 12), (195, 9), (196, 9), (196, 12)], [(195, 16), (195, 13), (196, 13), (196, 16)], [(195, 20), (195, 17), (196, 17), (196, 20)], [(75, 63), (75, 66), (76, 66), (76, 63)], [(80, 63), (77, 63), (77, 64), (80, 64)], [(79, 68), (79, 65), (80, 65), (80, 68)], [(79, 72), (79, 69), (80, 69), (80, 72)], [(75, 71), (78, 71), (78, 72), (75, 72)], [(32, 91), (29, 91), (29, 92), (32, 92)], [(31, 96), (31, 93), (32, 93), (32, 96)], [(27, 95), (30, 95), (30, 96), (27, 96)], [(23, 95), (26, 95), (26, 96), (23, 96)], [(19, 95), (22, 95), (22, 96), (19, 96)], [(15, 95), (18, 95), (18, 96), (15, 96)], [(11, 95), (14, 95), (14, 96), (11, 96)], [(11, 91), (11, 94), (12, 94), (12, 91)], [(11, 87), (11, 90), (12, 90), (12, 87)], [(7, 87), (10, 87), (10, 88), (7, 88)], [(7, 83), (7, 86), (8, 86), (8, 83)], [(3, 83), (6, 83), (6, 84), (3, 84)], [(3, 79), (3, 82), (4, 82), (4, 79)], [(8, 79), (5, 79), (5, 80), (8, 80)], [(7, 75), (7, 78), (8, 78), (8, 75)], [(3, 75), (6, 75), (6, 76), (3, 76)], [(3, 71), (3, 74), (4, 74), (4, 71)], [(8, 71), (5, 71), (5, 72), (8, 72)], [(12, 71), (9, 71), (9, 72), (12, 72)], [(11, 76), (11, 73), (12, 73), (12, 76)], [(47, 44), (47, 41), (48, 41), (48, 44)], [(52, 43), (49, 43), (49, 44), (52, 44)], [(56, 43), (53, 43), (53, 44), (56, 44)], [(99, 92), (99, 89), (100, 89), (100, 92)], [(104, 91), (101, 91), (101, 92), (104, 92)], [(103, 87), (103, 90), (104, 90), (104, 87)], [(103, 83), (103, 86), (104, 86), (104, 83)], [(103, 79), (103, 82), (104, 82), (104, 79)], [(99, 79), (102, 79), (102, 80), (99, 80)], [(99, 84), (99, 81), (100, 81), (100, 84)], [(95, 83), (98, 83), (98, 84), (95, 84)], [(95, 88), (95, 85), (96, 85), (96, 88)], [(95, 92), (95, 89), (96, 89), (96, 92)], [(27, 35), (30, 35), (30, 36), (27, 36)], [(23, 35), (26, 35), (26, 36), (23, 36)], [(23, 40), (23, 37), (24, 37), (24, 40)], [(19, 39), (22, 39), (22, 40), (19, 40)], [(19, 44), (19, 41), (20, 41), (20, 44)], [(24, 43), (21, 43), (21, 44), (24, 44)], [(28, 43), (25, 43), (25, 44), (28, 44)], [(32, 43), (29, 43), (29, 44), (32, 44)], [(31, 48), (31, 45), (32, 45), (32, 48)], [(27, 47), (30, 47), (30, 48), (27, 48)], [(23, 47), (26, 47), (26, 48), (23, 48)], [(23, 52), (23, 49), (24, 49), (24, 52)], [(28, 51), (25, 51), (25, 52), (28, 52)], [(27, 56), (27, 53), (28, 53), (28, 56)], [(32, 55), (29, 55), (29, 56), (32, 56)], [(31, 51), (31, 54), (32, 54), (32, 51)], [(36, 51), (33, 51), (33, 52), (36, 52)], [(35, 56), (35, 53), (36, 53), (36, 56)], [(76, 27), (73, 27), (73, 28), (76, 28)], [(15, 91), (18, 91), (18, 92), (15, 92)], [(195, 47), (198, 47), (198, 48), (195, 48)], [(195, 43), (195, 46), (196, 46), (196, 43)], [(191, 43), (194, 43), (194, 44), (191, 44)], [(179, 68), (179, 65), (180, 65), (180, 68)], [(179, 72), (179, 69), (180, 69), (180, 72)], [(179, 76), (179, 73), (180, 73), (180, 76)], [(184, 75), (181, 75), (181, 76), (184, 76)], [(183, 71), (183, 74), (184, 74), (184, 71)], [(183, 67), (183, 70), (184, 70), (184, 67)], [(108, 35), (105, 35), (105, 36), (108, 36)], [(112, 35), (109, 35), (109, 36), (112, 36)], [(111, 31), (111, 34), (112, 34), (112, 31)], [(107, 31), (110, 31), (110, 32), (107, 32)], [(67, 67), (70, 67), (70, 68), (67, 68)], [(67, 72), (67, 69), (68, 69), (68, 72)], [(196, 95), (193, 95), (193, 96), (196, 96)], [(55, 64), (55, 61), (56, 61), (56, 64)], [(60, 63), (57, 63), (57, 64), (60, 64)], [(183, 31), (183, 34), (184, 34), (184, 31)], [(159, 3), (159, 6), (160, 6), (160, 3)], [(164, 3), (161, 3), (161, 4), (164, 4)], [(168, 3), (165, 3), (165, 4), (168, 4)], [(172, 3), (169, 3), (169, 4), (172, 4)], [(171, 8), (171, 5), (172, 5), (172, 8)], [(171, 12), (171, 9), (172, 9), (172, 12)], [(167, 11), (170, 11), (170, 12), (167, 12)], [(163, 11), (166, 11), (166, 12), (163, 12)], [(163, 16), (163, 13), (164, 13), (164, 16)], [(159, 15), (162, 15), (162, 16), (159, 16)], [(159, 11), (159, 14), (160, 14), (160, 11)], [(155, 11), (158, 11), (158, 12), (155, 12)], [(155, 7), (155, 10), (156, 10), (156, 7)], [(155, 3), (155, 6), (156, 6), (156, 3)], [(151, 3), (154, 3), (154, 4), (151, 4)], [(147, 3), (150, 3), (150, 4), (147, 4)], [(147, 8), (147, 5), (148, 5), (148, 8)], [(152, 7), (149, 7), (149, 8), (152, 8)], [(88, 19), (85, 19), (85, 20), (88, 20)], [(92, 19), (89, 19), (89, 20), (92, 20)], [(151, 63), (151, 66), (152, 66), (152, 63)], [(151, 59), (151, 62), (152, 62), (152, 59)], [(115, 19), (115, 22), (116, 22), (116, 19)], [(115, 15), (115, 18), (116, 18), (116, 15)], [(115, 11), (115, 14), (116, 14), (116, 11)], [(159, 19), (159, 22), (160, 22), (160, 19)], [(164, 19), (161, 19), (161, 20), (164, 20)], [(163, 24), (163, 21), (164, 21), (164, 24)], [(168, 23), (165, 23), (165, 24), (168, 24)], [(167, 19), (167, 22), (168, 22), (168, 19)], [(167, 15), (167, 18), (168, 18), (168, 15)], [(183, 79), (186, 79), (186, 80), (183, 80)], [(179, 79), (182, 79), (182, 80), (179, 80)], [(88, 91), (85, 91), (85, 92), (88, 92)], [(87, 96), (87, 93), (88, 93), (88, 96)], [(83, 95), (86, 95), (86, 96), (83, 96)], [(67, 59), (67, 62), (68, 62), (68, 59)], [(67, 55), (67, 58), (68, 58), (68, 55)], [(72, 55), (69, 55), (69, 56), (72, 56)], [(76, 55), (73, 55), (73, 56), (76, 56)], [(80, 55), (77, 55), (77, 56), (80, 56)], [(79, 60), (79, 57), (80, 57), (80, 60)], [(75, 59), (78, 59), (78, 60), (75, 60)], [(71, 59), (74, 59), (74, 60), (71, 60)], [(179, 19), (182, 19), (182, 20), (179, 20)], [(179, 24), (179, 21), (180, 21), (180, 24)], [(11, 39), (14, 39), (14, 40), (11, 40)], [(11, 35), (11, 38), (12, 38), (12, 35)], [(7, 35), (10, 35), (10, 36), (7, 36)], [(3, 35), (6, 35), (6, 36), (3, 36)], [(3, 31), (3, 34), (4, 34), (4, 31)], [(3, 27), (3, 30), (4, 30), (4, 27)], [(3, 23), (3, 26), (4, 26), (4, 23)], [(8, 23), (5, 23), (5, 24), (8, 24)], [(12, 23), (9, 23), (9, 24), (12, 24)], [(16, 23), (13, 23), (13, 24), (16, 24)], [(15, 28), (15, 25), (16, 25), (16, 28)], [(20, 27), (17, 27), (17, 28), (20, 28)], [(139, 7), (139, 10), (140, 10), (140, 7)], [(140, 35), (137, 35), (137, 36), (140, 36)], [(144, 35), (141, 35), (141, 36), (144, 36)], [(148, 35), (145, 35), (145, 36), (148, 36)], [(152, 35), (149, 35), (149, 36), (152, 36)], [(151, 31), (151, 34), (152, 34), (152, 31)], [(151, 27), (151, 30), (152, 30), (152, 27)], [(64, 11), (61, 11), (61, 12), (64, 12)], [(68, 11), (65, 11), (65, 12), (68, 12)], [(72, 11), (69, 11), (69, 12), (72, 12)], [(72, 35), (69, 35), (69, 36), (72, 36)], [(187, 19), (187, 22), (188, 22), (188, 19)], [(187, 15), (187, 18), (188, 18), (188, 15)], [(187, 11), (187, 14), (188, 14), (188, 11)], [(187, 7), (187, 10), (188, 10), (188, 7)], [(187, 3), (187, 6), (188, 6), (188, 3)], [(192, 3), (189, 3), (189, 4), (192, 4)], [(196, 3), (193, 3), (193, 4), (196, 4)], [(99, 27), (99, 30), (100, 30), (100, 27)], [(104, 27), (101, 27), (101, 28), (104, 28)], [(160, 35), (157, 35), (157, 36), (160, 36)], [(164, 35), (161, 35), (161, 36), (164, 36)], [(99, 67), (102, 67), (102, 68), (99, 68)], [(99, 72), (99, 69), (100, 69), (100, 72)], [(95, 71), (98, 71), (98, 72), (95, 72)], [(91, 71), (94, 71), (94, 72), (91, 72)], [(91, 76), (91, 73), (92, 73), (92, 76)], [(39, 32), (39, 29), (40, 29), (40, 32)], [(3, 19), (6, 19), (6, 20), (3, 20)], [(3, 15), (3, 18), (4, 18), (4, 15)], [(3, 11), (3, 14), (4, 14), (4, 11)], [(3, 7), (3, 10), (4, 10), (4, 7)], [(3, 3), (3, 6), (4, 6), (4, 3)], [(43, 67), (46, 67), (46, 68), (43, 68)], [(43, 72), (43, 69), (44, 69), (44, 72)], [(39, 71), (42, 71), (42, 72), (39, 72)], [(183, 59), (186, 59), (186, 60), (183, 60)], [(19, 55), (22, 55), (22, 56), (19, 56)], [(15, 55), (18, 55), (18, 56), (15, 56)], [(11, 55), (14, 55), (14, 56), (11, 56)], [(7, 55), (10, 55), (10, 56), (7, 56)], [(3, 55), (6, 55), (6, 56), (3, 56)], [(28, 39), (25, 39), (25, 40), (28, 40)], [(32, 39), (29, 39), (29, 40), (32, 40)], [(36, 39), (33, 39), (33, 40), (36, 40)], [(35, 44), (35, 41), (36, 41), (36, 44)], [(35, 48), (35, 45), (36, 45), (36, 48)], [(23, 88), (23, 85), (24, 85), (24, 88)], [(28, 87), (25, 87), (25, 88), (28, 88)], [(32, 87), (29, 87), (29, 88), (32, 88)], [(139, 67), (139, 70), (140, 70), (140, 67)], [(139, 63), (139, 66), (140, 66), (140, 63)], [(139, 59), (139, 62), (140, 62), (140, 59)], [(107, 63), (110, 63), (110, 64), (107, 64)], [(27, 3), (30, 3), (30, 4), (27, 4)], [(23, 3), (26, 3), (26, 4), (23, 4)], [(55, 16), (55, 13), (56, 13), (56, 16)], [(47, 48), (47, 45), (48, 45), (48, 48)], [(43, 47), (46, 47), (46, 48), (43, 48)], [(27, 16), (27, 13), (28, 13), (28, 16)], [(68, 15), (65, 15), (65, 16), (68, 16)], [(11, 28), (11, 25), (12, 25), (12, 28)], [(11, 32), (11, 29), (12, 29), (12, 32)], [(7, 31), (10, 31), (10, 32), (7, 32)], [(7, 27), (7, 30), (8, 30), (8, 27)], [(4, 95), (1, 95), (1, 96), (4, 96)], [(8, 95), (5, 95), (5, 96), (8, 96)], [(7, 91), (7, 94), (8, 94), (8, 91)], [(3, 91), (6, 91), (6, 92), (3, 92)], [(3, 87), (3, 90), (4, 90), (4, 87)], [(63, 79), (66, 79), (66, 80), (63, 80)], [(63, 84), (63, 81), (64, 81), (64, 84)], [(59, 83), (62, 83), (62, 84), (59, 84)], [(59, 79), (59, 82), (60, 82), (60, 79)], [(59, 75), (59, 78), (60, 78), (60, 75)], [(8, 47), (5, 47), (5, 48), (8, 48)], [(7, 52), (7, 49), (8, 49), (8, 52)], [(12, 51), (9, 51), (9, 52), (12, 52)], [(16, 51), (13, 51), (13, 52), (16, 52)], [(20, 51), (17, 51), (17, 52), (20, 52)], [(19, 47), (19, 50), (20, 50), (20, 47)], [(135, 79), (138, 79), (138, 80), (135, 80)], [(135, 84), (135, 81), (136, 81), (136, 84)], [(135, 88), (135, 85), (136, 85), (136, 88)], [(131, 87), (134, 87), (134, 88), (131, 88)], [(131, 83), (131, 86), (132, 86), (132, 83)], [(131, 79), (131, 82), (132, 82), (132, 79)], [(131, 75), (131, 78), (132, 78), (132, 75)], [(27, 27), (30, 27), (30, 28), (27, 28)], [(27, 32), (27, 29), (28, 29), (28, 32)], [(111, 47), (111, 50), (112, 50), (112, 47)], [(116, 47), (113, 47), (113, 48), (116, 48)], [(120, 47), (117, 47), (117, 48), (120, 48)], [(124, 47), (121, 47), (121, 48), (124, 48)], [(183, 7), (186, 7), (186, 8), (183, 8)], [(179, 7), (182, 7), (182, 8), (179, 8)], [(179, 12), (179, 9), (180, 9), (180, 12)], [(184, 11), (181, 11), (181, 12), (184, 12)], [(183, 16), (183, 13), (184, 13), (184, 16)], [(179, 15), (182, 15), (182, 16), (179, 16)], [(195, 83), (195, 86), (196, 86), (196, 83)], [(76, 91), (73, 91), (73, 92), (76, 92)], [(91, 67), (91, 70), (92, 70), (92, 67)], [(96, 67), (93, 67), (93, 68), (96, 68)], [(127, 27), (130, 27), (130, 28), (127, 28)], [(15, 32), (15, 29), (16, 29), (16, 32)], [(175, 4), (175, 1), (176, 1), (176, 4)], [(180, 3), (177, 3), (177, 4), (180, 4)], [(184, 3), (181, 3), (181, 4), (184, 4)], [(172, 23), (169, 23), (169, 24), (172, 24)], [(175, 11), (175, 14), (176, 14), (176, 11)], [(175, 7), (175, 10), (176, 10), (176, 7)], [(87, 56), (87, 53), (88, 53), (88, 56)], [(83, 55), (86, 55), (86, 56), (83, 56)], [(83, 60), (83, 57), (84, 57), (84, 60)], [(83, 64), (83, 61), (84, 61), (84, 64)], [(195, 51), (195, 54), (196, 54), (196, 51)], [(164, 7), (161, 7), (161, 8), (164, 8)], [(168, 7), (165, 7), (165, 8), (168, 8)], [(119, 19), (119, 22), (120, 22), (120, 19)], [(119, 15), (119, 18), (120, 18), (120, 15)], [(124, 15), (121, 15), (121, 16), (124, 16)], [(123, 20), (123, 17), (124, 17), (124, 20)], [(159, 56), (159, 53), (160, 53), (160, 56)], [(147, 67), (150, 67), (150, 68), (147, 68)], [(19, 67), (19, 70), (20, 70), (20, 67)], [(27, 64), (27, 61), (28, 61), (28, 64)], [(32, 63), (29, 63), (29, 64), (32, 64)], [(36, 63), (33, 63), (33, 64), (36, 64)], [(111, 76), (111, 73), (112, 73), (112, 76)], [(107, 75), (110, 75), (110, 76), (107, 76)], [(28, 71), (25, 71), (25, 72), (28, 72)], [(39, 3), (42, 3), (42, 4), (39, 4)], [(191, 59), (191, 62), (192, 62), (192, 59)], [(67, 51), (67, 54), (68, 54), (68, 51)], [(63, 51), (66, 51), (66, 52), (63, 52)], [(59, 51), (62, 51), (62, 52), (59, 52)], [(23, 92), (23, 89), (24, 89), (24, 92)], [(83, 8), (83, 5), (84, 5), (84, 8)], [(63, 67), (63, 70), (64, 70), (64, 67)], [(47, 79), (47, 82), (48, 82), (48, 79)], [(135, 68), (135, 65), (136, 65), (136, 68)], [(24, 63), (21, 63), (21, 64), (24, 64)]]

maze, start, end = grid.generate(200, 100, polygons), (9, 7), (174, 84)

img_array = viz.generate_image(maze, start, end)
utils.render_image(img_array)

Test Case/Grid 3: Boxes Galore

In [89]:
# polygons = [[(i, y), (i, y + 2), (i + 2, y + 2), (i + 2, y)] for i in range(1, 197, 5) for y in range(1, 97, 5)]
polygons = [[(1, 1), (1, 3), (3, 3), (3, 1)], [(1, 6), (1, 8), (3, 8), (3, 6)], [(1, 11), (1, 13), (3, 13), (3, 11)], [(1, 16), (1, 18), (3, 18), (3, 16)], [(1, 21), (1, 23), (3, 23), (3, 21)], [(1, 26), (1, 28), (3, 28), (3, 26)], [(1, 31), (1, 33), (3, 33), (3, 31)], [(1, 36), (1, 38), (3, 38), (3, 36)], [(1, 41), (1, 43), (3, 43), (3, 41)], [(1, 46), (1, 48), (3, 48), (3, 46)], [(1, 51), (1, 53), (3, 53), (3, 51)], [(1, 56), (1, 58), (3, 58), (3, 56)], [(1, 61), (1, 63), (3, 63), (3, 61)], [(1, 66), (1, 68), (3, 68), (3, 66)], [(1, 71), (1, 73), (3, 73), (3, 71)], [(1, 76), (1, 78), (3, 78), (3, 76)], [(1, 81), (1, 83), (3, 83), (3, 81)], [(1, 86), (1, 88), (3, 88), (3, 86)], [(1, 91), (1, 93), (3, 93), (3, 91)], [(1, 96), (1, 98), (3, 98), (3, 96)], [(6, 1), (6, 3), (8, 3), (8, 1)], [(6, 6), (6, 8), (8, 8), (8, 6)], [(6, 11), (6, 13), (8, 13), (8, 11)], [(6, 16), (6, 18), (8, 18), (8, 16)], [(6, 21), (6, 23), (8, 23), (8, 21)], [(6, 26), (6, 28), (8, 28), (8, 26)], [(6, 31), (6, 33), (8, 33), (8, 31)], [(6, 36), (6, 38), (8, 38), (8, 36)], [(6, 41), (6, 43), (8, 43), (8, 41)], [(6, 46), (6, 48), (8, 48), (8, 46)], [(6, 51), (6, 53), (8, 53), (8, 51)], [(6, 56), (6, 58), (8, 58), (8, 56)], [(6, 61), (6, 63), (8, 63), (8, 61)], [(6, 66), (6, 68), (8, 68), (8, 66)], [(6, 71), (6, 73), (8, 73), (8, 71)], [(6, 76), (6, 78), (8, 78), (8, 76)], [(6, 81), (6, 83), (8, 83), (8, 81)], [(6, 86), (6, 88), (8, 88), (8, 86)], [(6, 91), (6, 93), (8, 93), (8, 91)], [(6, 96), (6, 98), (8, 98), (8, 96)], [(11, 1), (11, 3), (13, 3), (13, 1)], [(11, 6), (11, 8), (13, 8), (13, 6)], [(11, 11), (11, 13), (13, 13), (13, 11)], [(11, 16), (11, 18), (13, 18), (13, 16)], [(11, 21), (11, 23), (13, 23), (13, 21)], [(11, 26), (11, 28), (13, 28), (13, 26)], [(11, 31), (11, 33), (13, 33), (13, 31)], [(11, 36), (11, 38), (13, 38), (13, 36)], [(11, 41), (11, 43), (13, 43), (13, 41)], [(11, 46), (11, 48), (13, 48), (13, 46)], [(11, 51), (11, 53), (13, 53), (13, 51)], [(11, 56), (11, 58), (13, 58), (13, 56)], [(11, 61), (11, 63), (13, 63), (13, 61)], [(11, 66), (11, 68), (13, 68), (13, 66)], [(11, 71), (11, 73), (13, 73), (13, 71)], [(11, 76), (11, 78), (13, 78), (13, 76)], [(11, 81), (11, 83), (13, 83), (13, 81)], [(11, 86), (11, 88), (13, 88), (13, 86)], [(11, 91), (11, 93), (13, 93), (13, 91)], [(11, 96), (11, 98), (13, 98), (13, 96)], [(16, 1), (16, 3), (18, 3), (18, 1)], [(16, 6), (16, 8), (18, 8), (18, 6)], [(16, 11), (16, 13), (18, 13), (18, 11)], [(16, 16), (16, 18), (18, 18), (18, 16)], [(16, 21), (16, 23), (18, 23), (18, 21)], [(16, 26), (16, 28), (18, 28), (18, 26)], [(16, 31), (16, 33), (18, 33), (18, 31)], [(16, 36), (16, 38), (18, 38), (18, 36)], [(16, 41), (16, 43), (18, 43), (18, 41)], [(16, 46), (16, 48), (18, 48), (18, 46)], [(16, 51), (16, 53), (18, 53), (18, 51)], [(16, 56), (16, 58), (18, 58), (18, 56)], [(16, 61), (16, 63), (18, 63), (18, 61)], [(16, 66), (16, 68), (18, 68), (18, 66)], [(16, 71), (16, 73), (18, 73), (18, 71)], [(16, 76), (16, 78), (18, 78), (18, 76)], [(16, 81), (16, 83), (18, 83), (18, 81)], [(16, 86), (16, 88), (18, 88), (18, 86)], [(16, 91), (16, 93), (18, 93), (18, 91)], [(16, 96), (16, 98), (18, 98), (18, 96)], [(21, 1), (21, 3), (23, 3), (23, 1)], [(21, 6), (21, 8), (23, 8), (23, 6)], [(21, 11), (21, 13), (23, 13), (23, 11)], [(21, 16), (21, 18), (23, 18), (23, 16)], [(21, 21), (21, 23), (23, 23), (23, 21)], [(21, 26), (21, 28), (23, 28), (23, 26)], [(21, 31), (21, 33), (23, 33), (23, 31)], [(21, 36), (21, 38), (23, 38), (23, 36)], [(21, 41), (21, 43), (23, 43), (23, 41)], [(21, 46), (21, 48), (23, 48), (23, 46)], [(21, 51), (21, 53), (23, 53), (23, 51)], [(21, 56), (21, 58), (23, 58), (23, 56)], [(21, 61), (21, 63), (23, 63), (23, 61)], [(21, 66), (21, 68), (23, 68), (23, 66)], [(21, 71), (21, 73), (23, 73), (23, 71)], [(21, 76), (21, 78), (23, 78), (23, 76)], [(21, 81), (21, 83), (23, 83), (23, 81)], [(21, 86), (21, 88), (23, 88), (23, 86)], [(21, 91), (21, 93), (23, 93), (23, 91)], [(21, 96), (21, 98), (23, 98), (23, 96)], [(26, 1), (26, 3), (28, 3), (28, 1)], [(26, 6), (26, 8), (28, 8), (28, 6)], [(26, 11), (26, 13), (28, 13), (28, 11)], [(26, 16), (26, 18), (28, 18), (28, 16)], [(26, 21), (26, 23), (28, 23), (28, 21)], [(26, 26), (26, 28), (28, 28), (28, 26)], [(26, 31), (26, 33), (28, 33), (28, 31)], [(26, 36), (26, 38), (28, 38), (28, 36)], [(26, 41), (26, 43), (28, 43), (28, 41)], [(26, 46), (26, 48), (28, 48), (28, 46)], [(26, 51), (26, 53), (28, 53), (28, 51)], [(26, 56), (26, 58), (28, 58), (28, 56)], [(26, 61), (26, 63), (28, 63), (28, 61)], [(26, 66), (26, 68), (28, 68), (28, 66)], [(26, 71), (26, 73), (28, 73), (28, 71)], [(26, 76), (26, 78), (28, 78), (28, 76)], [(26, 81), (26, 83), (28, 83), (28, 81)], [(26, 86), (26, 88), (28, 88), (28, 86)], [(26, 91), (26, 93), (28, 93), (28, 91)], [(26, 96), (26, 98), (28, 98), (28, 96)], [(31, 1), (31, 3), (33, 3), (33, 1)], [(31, 6), (31, 8), (33, 8), (33, 6)], [(31, 11), (31, 13), (33, 13), (33, 11)], [(31, 16), (31, 18), (33, 18), (33, 16)], [(31, 21), (31, 23), (33, 23), (33, 21)], [(31, 26), (31, 28), (33, 28), (33, 26)], [(31, 31), (31, 33), (33, 33), (33, 31)], [(31, 36), (31, 38), (33, 38), (33, 36)], [(31, 41), (31, 43), (33, 43), (33, 41)], [(31, 46), (31, 48), (33, 48), (33, 46)], [(31, 51), (31, 53), (33, 53), (33, 51)], [(31, 56), (31, 58), (33, 58), (33, 56)], [(31, 61), (31, 63), (33, 63), (33, 61)], [(31, 66), (31, 68), (33, 68), (33, 66)], [(31, 71), (31, 73), (33, 73), (33, 71)], [(31, 76), (31, 78), (33, 78), (33, 76)], [(31, 81), (31, 83), (33, 83), (33, 81)], [(31, 86), (31, 88), (33, 88), (33, 86)], [(31, 91), (31, 93), (33, 93), (33, 91)], [(31, 96), (31, 98), (33, 98), (33, 96)], [(36, 1), (36, 3), (38, 3), (38, 1)], [(36, 6), (36, 8), (38, 8), (38, 6)], [(36, 11), (36, 13), (38, 13), (38, 11)], [(36, 16), (36, 18), (38, 18), (38, 16)], [(36, 21), (36, 23), (38, 23), (38, 21)], [(36, 26), (36, 28), (38, 28), (38, 26)], [(36, 31), (36, 33), (38, 33), (38, 31)], [(36, 36), (36, 38), (38, 38), (38, 36)], [(36, 41), (36, 43), (38, 43), (38, 41)], [(36, 46), (36, 48), (38, 48), (38, 46)], [(36, 51), (36, 53), (38, 53), (38, 51)], [(36, 56), (36, 58), (38, 58), (38, 56)], [(36, 61), (36, 63), (38, 63), (38, 61)], [(36, 66), (36, 68), (38, 68), (38, 66)], [(36, 71), (36, 73), (38, 73), (38, 71)], [(36, 76), (36, 78), (38, 78), (38, 76)], [(36, 81), (36, 83), (38, 83), (38, 81)], [(36, 86), (36, 88), (38, 88), (38, 86)], [(36, 91), (36, 93), (38, 93), (38, 91)], [(36, 96), (36, 98), (38, 98), (38, 96)], [(41, 1), (41, 3), (43, 3), (43, 1)], [(41, 6), (41, 8), (43, 8), (43, 6)], [(41, 11), (41, 13), (43, 13), (43, 11)], [(41, 16), (41, 18), (43, 18), (43, 16)], [(41, 21), (41, 23), (43, 23), (43, 21)], [(41, 26), (41, 28), (43, 28), (43, 26)], [(41, 31), (41, 33), (43, 33), (43, 31)], [(41, 36), (41, 38), (43, 38), (43, 36)], [(41, 41), (41, 43), (43, 43), (43, 41)], [(41, 46), (41, 48), (43, 48), (43, 46)], [(41, 51), (41, 53), (43, 53), (43, 51)], [(41, 56), (41, 58), (43, 58), (43, 56)], [(41, 61), (41, 63), (43, 63), (43, 61)], [(41, 66), (41, 68), (43, 68), (43, 66)], [(41, 71), (41, 73), (43, 73), (43, 71)], [(41, 76), (41, 78), (43, 78), (43, 76)], [(41, 81), (41, 83), (43, 83), (43, 81)], [(41, 86), (41, 88), (43, 88), (43, 86)], [(41, 91), (41, 93), (43, 93), (43, 91)], [(41, 96), (41, 98), (43, 98), (43, 96)], [(46, 1), (46, 3), (48, 3), (48, 1)], [(46, 6), (46, 8), (48, 8), (48, 6)], [(46, 11), (46, 13), (48, 13), (48, 11)], [(46, 16), (46, 18), (48, 18), (48, 16)], [(46, 21), (46, 23), (48, 23), (48, 21)], [(46, 26), (46, 28), (48, 28), (48, 26)], [(46, 31), (46, 33), (48, 33), (48, 31)], [(46, 36), (46, 38), (48, 38), (48, 36)], [(46, 41), (46, 43), (48, 43), (48, 41)], [(46, 46), (46, 48), (48, 48), (48, 46)], [(46, 51), (46, 53), (48, 53), (48, 51)], [(46, 56), (46, 58), (48, 58), (48, 56)], [(46, 61), (46, 63), (48, 63), (48, 61)], [(46, 66), (46, 68), (48, 68), (48, 66)], [(46, 71), (46, 73), (48, 73), (48, 71)], [(46, 76), (46, 78), (48, 78), (48, 76)], [(46, 81), (46, 83), (48, 83), (48, 81)], [(46, 86), (46, 88), (48, 88), (48, 86)], [(46, 91), (46, 93), (48, 93), (48, 91)], [(46, 96), (46, 98), (48, 98), (48, 96)], [(51, 1), (51, 3), (53, 3), (53, 1)], [(51, 6), (51, 8), (53, 8), (53, 6)], [(51, 11), (51, 13), (53, 13), (53, 11)], [(51, 16), (51, 18), (53, 18), (53, 16)], [(51, 21), (51, 23), (53, 23), (53, 21)], [(51, 26), (51, 28), (53, 28), (53, 26)], [(51, 31), (51, 33), (53, 33), (53, 31)], [(51, 36), (51, 38), (53, 38), (53, 36)], [(51, 41), (51, 43), (53, 43), (53, 41)], [(51, 46), (51, 48), (53, 48), (53, 46)], [(51, 51), (51, 53), (53, 53), (53, 51)], [(51, 56), (51, 58), (53, 58), (53, 56)], [(51, 61), (51, 63), (53, 63), (53, 61)], [(51, 66), (51, 68), (53, 68), (53, 66)], [(51, 71), (51, 73), (53, 73), (53, 71)], [(51, 76), (51, 78), (53, 78), (53, 76)], [(51, 81), (51, 83), (53, 83), (53, 81)], [(51, 86), (51, 88), (53, 88), (53, 86)], [(51, 91), (51, 93), (53, 93), (53, 91)], [(51, 96), (51, 98), (53, 98), (53, 96)], [(56, 1), (56, 3), (58, 3), (58, 1)], [(56, 6), (56, 8), (58, 8), (58, 6)], [(56, 11), (56, 13), (58, 13), (58, 11)], [(56, 16), (56, 18), (58, 18), (58, 16)], [(56, 21), (56, 23), (58, 23), (58, 21)], [(56, 26), (56, 28), (58, 28), (58, 26)], [(56, 31), (56, 33), (58, 33), (58, 31)], [(56, 36), (56, 38), (58, 38), (58, 36)], [(56, 41), (56, 43), (58, 43), (58, 41)], [(56, 46), (56, 48), (58, 48), (58, 46)], [(56, 51), (56, 53), (58, 53), (58, 51)], [(56, 56), (56, 58), (58, 58), (58, 56)], [(56, 61), (56, 63), (58, 63), (58, 61)], [(56, 66), (56, 68), (58, 68), (58, 66)], [(56, 71), (56, 73), (58, 73), (58, 71)], [(56, 76), (56, 78), (58, 78), (58, 76)], [(56, 81), (56, 83), (58, 83), (58, 81)], [(56, 86), (56, 88), (58, 88), (58, 86)], [(56, 91), (56, 93), (58, 93), (58, 91)], [(56, 96), (56, 98), (58, 98), (58, 96)], [(61, 1), (61, 3), (63, 3), (63, 1)], [(61, 6), (61, 8), (63, 8), (63, 6)], [(61, 11), (61, 13), (63, 13), (63, 11)], [(61, 16), (61, 18), (63, 18), (63, 16)], [(61, 21), (61, 23), (63, 23), (63, 21)], [(61, 26), (61, 28), (63, 28), (63, 26)], [(61, 31), (61, 33), (63, 33), (63, 31)], [(61, 36), (61, 38), (63, 38), (63, 36)], [(61, 41), (61, 43), (63, 43), (63, 41)], [(61, 46), (61, 48), (63, 48), (63, 46)], [(61, 51), (61, 53), (63, 53), (63, 51)], [(61, 56), (61, 58), (63, 58), (63, 56)], [(61, 61), (61, 63), (63, 63), (63, 61)], [(61, 66), (61, 68), (63, 68), (63, 66)], [(61, 71), (61, 73), (63, 73), (63, 71)], [(61, 76), (61, 78), (63, 78), (63, 76)], [(61, 81), (61, 83), (63, 83), (63, 81)], [(61, 86), (61, 88), (63, 88), (63, 86)], [(61, 91), (61, 93), (63, 93), (63, 91)], [(61, 96), (61, 98), (63, 98), (63, 96)], [(66, 1), (66, 3), (68, 3), (68, 1)], [(66, 6), (66, 8), (68, 8), (68, 6)], [(66, 11), (66, 13), (68, 13), (68, 11)], [(66, 16), (66, 18), (68, 18), (68, 16)], [(66, 21), (66, 23), (68, 23), (68, 21)], [(66, 26), (66, 28), (68, 28), (68, 26)], [(66, 31), (66, 33), (68, 33), (68, 31)], [(66, 36), (66, 38), (68, 38), (68, 36)], [(66, 41), (66, 43), (68, 43), (68, 41)], [(66, 46), (66, 48), (68, 48), (68, 46)], [(66, 51), (66, 53), (68, 53), (68, 51)], [(66, 56), (66, 58), (68, 58), (68, 56)], [(66, 61), (66, 63), (68, 63), (68, 61)], [(66, 66), (66, 68), (68, 68), (68, 66)], [(66, 71), (66, 73), (68, 73), (68, 71)], [(66, 76), (66, 78), (68, 78), (68, 76)], [(66, 81), (66, 83), (68, 83), (68, 81)], [(66, 86), (66, 88), (68, 88), (68, 86)], [(66, 91), (66, 93), (68, 93), (68, 91)], [(66, 96), (66, 98), (68, 98), (68, 96)], [(71, 1), (71, 3), (73, 3), (73, 1)], [(71, 6), (71, 8), (73, 8), (73, 6)], [(71, 11), (71, 13), (73, 13), (73, 11)], [(71, 16), (71, 18), (73, 18), (73, 16)], [(71, 21), (71, 23), (73, 23), (73, 21)], [(71, 26), (71, 28), (73, 28), (73, 26)], [(71, 31), (71, 33), (73, 33), (73, 31)], [(71, 36), (71, 38), (73, 38), (73, 36)], [(71, 41), (71, 43), (73, 43), (73, 41)], [(71, 46), (71, 48), (73, 48), (73, 46)], [(71, 51), (71, 53), (73, 53), (73, 51)], [(71, 56), (71, 58), (73, 58), (73, 56)], [(71, 61), (71, 63), (73, 63), (73, 61)], [(71, 66), (71, 68), (73, 68), (73, 66)], [(71, 71), (71, 73), (73, 73), (73, 71)], [(71, 76), (71, 78), (73, 78), (73, 76)], [(71, 81), (71, 83), (73, 83), (73, 81)], [(71, 86), (71, 88), (73, 88), (73, 86)], [(71, 91), (71, 93), (73, 93), (73, 91)], [(71, 96), (71, 98), (73, 98), (73, 96)], [(76, 1), (76, 3), (78, 3), (78, 1)], [(76, 6), (76, 8), (78, 8), (78, 6)], [(76, 11), (76, 13), (78, 13), (78, 11)], [(76, 16), (76, 18), (78, 18), (78, 16)], [(76, 21), (76, 23), (78, 23), (78, 21)], [(76, 26), (76, 28), (78, 28), (78, 26)], [(76, 31), (76, 33), (78, 33), (78, 31)], [(76, 36), (76, 38), (78, 38), (78, 36)], [(76, 41), (76, 43), (78, 43), (78, 41)], [(76, 46), (76, 48), (78, 48), (78, 46)], [(76, 51), (76, 53), (78, 53), (78, 51)], [(76, 56), (76, 58), (78, 58), (78, 56)], [(76, 61), (76, 63), (78, 63), (78, 61)], [(76, 66), (76, 68), (78, 68), (78, 66)], [(76, 71), (76, 73), (78, 73), (78, 71)], [(76, 76), (76, 78), (78, 78), (78, 76)], [(76, 81), (76, 83), (78, 83), (78, 81)], [(76, 86), (76, 88), (78, 88), (78, 86)], [(76, 91), (76, 93), (78, 93), (78, 91)], [(76, 96), (76, 98), (78, 98), (78, 96)], [(81, 1), (81, 3), (83, 3), (83, 1)], [(81, 6), (81, 8), (83, 8), (83, 6)], [(81, 11), (81, 13), (83, 13), (83, 11)], [(81, 16), (81, 18), (83, 18), (83, 16)], [(81, 21), (81, 23), (83, 23), (83, 21)], [(81, 26), (81, 28), (83, 28), (83, 26)], [(81, 31), (81, 33), (83, 33), (83, 31)], [(81, 36), (81, 38), (83, 38), (83, 36)], [(81, 41), (81, 43), (83, 43), (83, 41)], [(81, 46), (81, 48), (83, 48), (83, 46)], [(81, 51), (81, 53), (83, 53), (83, 51)], [(81, 56), (81, 58), (83, 58), (83, 56)], [(81, 61), (81, 63), (83, 63), (83, 61)], [(81, 66), (81, 68), (83, 68), (83, 66)], [(81, 71), (81, 73), (83, 73), (83, 71)], [(81, 76), (81, 78), (83, 78), (83, 76)], [(81, 81), (81, 83), (83, 83), (83, 81)], [(81, 86), (81, 88), (83, 88), (83, 86)], [(81, 91), (81, 93), (83, 93), (83, 91)], [(81, 96), (81, 98), (83, 98), (83, 96)], [(86, 1), (86, 3), (88, 3), (88, 1)], [(86, 6), (86, 8), (88, 8), (88, 6)], [(86, 11), (86, 13), (88, 13), (88, 11)], [(86, 16), (86, 18), (88, 18), (88, 16)], [(86, 21), (86, 23), (88, 23), (88, 21)], [(86, 26), (86, 28), (88, 28), (88, 26)], [(86, 31), (86, 33), (88, 33), (88, 31)], [(86, 36), (86, 38), (88, 38), (88, 36)], [(86, 41), (86, 43), (88, 43), (88, 41)], [(86, 46), (86, 48), (88, 48), (88, 46)], [(86, 51), (86, 53), (88, 53), (88, 51)], [(86, 56), (86, 58), (88, 58), (88, 56)], [(86, 61), (86, 63), (88, 63), (88, 61)], [(86, 66), (86, 68), (88, 68), (88, 66)], [(86, 71), (86, 73), (88, 73), (88, 71)], [(86, 76), (86, 78), (88, 78), (88, 76)], [(86, 81), (86, 83), (88, 83), (88, 81)], [(86, 86), (86, 88), (88, 88), (88, 86)], [(86, 91), (86, 93), (88, 93), (88, 91)], [(86, 96), (86, 98), (88, 98), (88, 96)], [(91, 1), (91, 3), (93, 3), (93, 1)], [(91, 6), (91, 8), (93, 8), (93, 6)], [(91, 11), (91, 13), (93, 13), (93, 11)], [(91, 16), (91, 18), (93, 18), (93, 16)], [(91, 21), (91, 23), (93, 23), (93, 21)], [(91, 26), (91, 28), (93, 28), (93, 26)], [(91, 31), (91, 33), (93, 33), (93, 31)], [(91, 36), (91, 38), (93, 38), (93, 36)], [(91, 41), (91, 43), (93, 43), (93, 41)], [(91, 46), (91, 48), (93, 48), (93, 46)], [(91, 51), (91, 53), (93, 53), (93, 51)], [(91, 56), (91, 58), (93, 58), (93, 56)], [(91, 61), (91, 63), (93, 63), (93, 61)], [(91, 66), (91, 68), (93, 68), (93, 66)], [(91, 71), (91, 73), (93, 73), (93, 71)], [(91, 76), (91, 78), (93, 78), (93, 76)], [(91, 81), (91, 83), (93, 83), (93, 81)], [(91, 86), (91, 88), (93, 88), (93, 86)], [(91, 91), (91, 93), (93, 93), (93, 91)], [(91, 96), (91, 98), (93, 98), (93, 96)], [(96, 1), (96, 3), (98, 3), (98, 1)], [(96, 6), (96, 8), (98, 8), (98, 6)], [(96, 11), (96, 13), (98, 13), (98, 11)], [(96, 16), (96, 18), (98, 18), (98, 16)], [(96, 21), (96, 23), (98, 23), (98, 21)], [(96, 26), (96, 28), (98, 28), (98, 26)], [(96, 31), (96, 33), (98, 33), (98, 31)], [(96, 36), (96, 38), (98, 38), (98, 36)], [(96, 41), (96, 43), (98, 43), (98, 41)], [(96, 46), (96, 48), (98, 48), (98, 46)], [(96, 51), (96, 53), (98, 53), (98, 51)], [(96, 56), (96, 58), (98, 58), (98, 56)], [(96, 61), (96, 63), (98, 63), (98, 61)], [(96, 66), (96, 68), (98, 68), (98, 66)], [(96, 71), (96, 73), (98, 73), (98, 71)], [(96, 76), (96, 78), (98, 78), (98, 76)], [(96, 81), (96, 83), (98, 83), (98, 81)], [(96, 86), (96, 88), (98, 88), (98, 86)], [(96, 91), (96, 93), (98, 93), (98, 91)], [(96, 96), (96, 98), (98, 98), (98, 96)], [(101, 1), (101, 3), (103, 3), (103, 1)], [(101, 6), (101, 8), (103, 8), (103, 6)], [(101, 11), (101, 13), (103, 13), (103, 11)], [(101, 16), (101, 18), (103, 18), (103, 16)], [(101, 21), (101, 23), (103, 23), (103, 21)], [(101, 26), (101, 28), (103, 28), (103, 26)], [(101, 31), (101, 33), (103, 33), (103, 31)], [(101, 36), (101, 38), (103, 38), (103, 36)], [(101, 41), (101, 43), (103, 43), (103, 41)], [(101, 46), (101, 48), (103, 48), (103, 46)], [(101, 51), (101, 53), (103, 53), (103, 51)], [(101, 56), (101, 58), (103, 58), (103, 56)], [(101, 61), (101, 63), (103, 63), (103, 61)], [(101, 66), (101, 68), (103, 68), (103, 66)], [(101, 71), (101, 73), (103, 73), (103, 71)], [(101, 76), (101, 78), (103, 78), (103, 76)], [(101, 81), (101, 83), (103, 83), (103, 81)], [(101, 86), (101, 88), (103, 88), (103, 86)], [(101, 91), (101, 93), (103, 93), (103, 91)], [(101, 96), (101, 98), (103, 98), (103, 96)], [(106, 1), (106, 3), (108, 3), (108, 1)], [(106, 6), (106, 8), (108, 8), (108, 6)], [(106, 11), (106, 13), (108, 13), (108, 11)], [(106, 16), (106, 18), (108, 18), (108, 16)], [(106, 21), (106, 23), (108, 23), (108, 21)], [(106, 26), (106, 28), (108, 28), (108, 26)], [(106, 31), (106, 33), (108, 33), (108, 31)], [(106, 36), (106, 38), (108, 38), (108, 36)], [(106, 41), (106, 43), (108, 43), (108, 41)], [(106, 46), (106, 48), (108, 48), (108, 46)], [(106, 51), (106, 53), (108, 53), (108, 51)], [(106, 56), (106, 58), (108, 58), (108, 56)], [(106, 61), (106, 63), (108, 63), (108, 61)], [(106, 66), (106, 68), (108, 68), (108, 66)], [(106, 71), (106, 73), (108, 73), (108, 71)], [(106, 76), (106, 78), (108, 78), (108, 76)], [(106, 81), (106, 83), (108, 83), (108, 81)], [(106, 86), (106, 88), (108, 88), (108, 86)], [(106, 91), (106, 93), (108, 93), (108, 91)], [(106, 96), (106, 98), (108, 98), (108, 96)], [(111, 1), (111, 3), (113, 3), (113, 1)], [(111, 6), (111, 8), (113, 8), (113, 6)], [(111, 11), (111, 13), (113, 13), (113, 11)], [(111, 16), (111, 18), (113, 18), (113, 16)], [(111, 21), (111, 23), (113, 23), (113, 21)], [(111, 26), (111, 28), (113, 28), (113, 26)], [(111, 31), (111, 33), (113, 33), (113, 31)], [(111, 36), (111, 38), (113, 38), (113, 36)], [(111, 41), (111, 43), (113, 43), (113, 41)], [(111, 46), (111, 48), (113, 48), (113, 46)], [(111, 51), (111, 53), (113, 53), (113, 51)], [(111, 56), (111, 58), (113, 58), (113, 56)], [(111, 61), (111, 63), (113, 63), (113, 61)], [(111, 66), (111, 68), (113, 68), (113, 66)], [(111, 71), (111, 73), (113, 73), (113, 71)], [(111, 76), (111, 78), (113, 78), (113, 76)], [(111, 81), (111, 83), (113, 83), (113, 81)], [(111, 86), (111, 88), (113, 88), (113, 86)], [(111, 91), (111, 93), (113, 93), (113, 91)], [(111, 96), (111, 98), (113, 98), (113, 96)], [(116, 1), (116, 3), (118, 3), (118, 1)], [(116, 6), (116, 8), (118, 8), (118, 6)], [(116, 11), (116, 13), (118, 13), (118, 11)], [(116, 16), (116, 18), (118, 18), (118, 16)], [(116, 21), (116, 23), (118, 23), (118, 21)], [(116, 26), (116, 28), (118, 28), (118, 26)], [(116, 31), (116, 33), (118, 33), (118, 31)], [(116, 36), (116, 38), (118, 38), (118, 36)], [(116, 41), (116, 43), (118, 43), (118, 41)], [(116, 46), (116, 48), (118, 48), (118, 46)], [(116, 51), (116, 53), (118, 53), (118, 51)], [(116, 56), (116, 58), (118, 58), (118, 56)], [(116, 61), (116, 63), (118, 63), (118, 61)], [(116, 66), (116, 68), (118, 68), (118, 66)], [(116, 71), (116, 73), (118, 73), (118, 71)], [(116, 76), (116, 78), (118, 78), (118, 76)], [(116, 81), (116, 83), (118, 83), (118, 81)], [(116, 86), (116, 88), (118, 88), (118, 86)], [(116, 91), (116, 93), (118, 93), (118, 91)], [(116, 96), (116, 98), (118, 98), (118, 96)], [(121, 1), (121, 3), (123, 3), (123, 1)], [(121, 6), (121, 8), (123, 8), (123, 6)], [(121, 11), (121, 13), (123, 13), (123, 11)], [(121, 16), (121, 18), (123, 18), (123, 16)], [(121, 21), (121, 23), (123, 23), (123, 21)], [(121, 26), (121, 28), (123, 28), (123, 26)], [(121, 31), (121, 33), (123, 33), (123, 31)], [(121, 36), (121, 38), (123, 38), (123, 36)], [(121, 41), (121, 43), (123, 43), (123, 41)], [(121, 46), (121, 48), (123, 48), (123, 46)], [(121, 51), (121, 53), (123, 53), (123, 51)], [(121, 56), (121, 58), (123, 58), (123, 56)], [(121, 61), (121, 63), (123, 63), (123, 61)], [(121, 66), (121, 68), (123, 68), (123, 66)], [(121, 71), (121, 73), (123, 73), (123, 71)], [(121, 76), (121, 78), (123, 78), (123, 76)], [(121, 81), (121, 83), (123, 83), (123, 81)], [(121, 86), (121, 88), (123, 88), (123, 86)], [(121, 91), (121, 93), (123, 93), (123, 91)], [(121, 96), (121, 98), (123, 98), (123, 96)], [(126, 1), (126, 3), (128, 3), (128, 1)], [(126, 6), (126, 8), (128, 8), (128, 6)], [(126, 11), (126, 13), (128, 13), (128, 11)], [(126, 16), (126, 18), (128, 18), (128, 16)], [(126, 21), (126, 23), (128, 23), (128, 21)], [(126, 26), (126, 28), (128, 28), (128, 26)], [(126, 31), (126, 33), (128, 33), (128, 31)], [(126, 36), (126, 38), (128, 38), (128, 36)], [(126, 41), (126, 43), (128, 43), (128, 41)], [(126, 46), (126, 48), (128, 48), (128, 46)], [(126, 51), (126, 53), (128, 53), (128, 51)], [(126, 56), (126, 58), (128, 58), (128, 56)], [(126, 61), (126, 63), (128, 63), (128, 61)], [(126, 66), (126, 68), (128, 68), (128, 66)], [(126, 71), (126, 73), (128, 73), (128, 71)], [(126, 76), (126, 78), (128, 78), (128, 76)], [(126, 81), (126, 83), (128, 83), (128, 81)], [(126, 86), (126, 88), (128, 88), (128, 86)], [(126, 91), (126, 93), (128, 93), (128, 91)], [(126, 96), (126, 98), (128, 98), (128, 96)], [(131, 1), (131, 3), (133, 3), (133, 1)], [(131, 6), (131, 8), (133, 8), (133, 6)], [(131, 11), (131, 13), (133, 13), (133, 11)], [(131, 16), (131, 18), (133, 18), (133, 16)], [(131, 21), (131, 23), (133, 23), (133, 21)], [(131, 26), (131, 28), (133, 28), (133, 26)], [(131, 31), (131, 33), (133, 33), (133, 31)], [(131, 36), (131, 38), (133, 38), (133, 36)], [(131, 41), (131, 43), (133, 43), (133, 41)], [(131, 46), (131, 48), (133, 48), (133, 46)], [(131, 51), (131, 53), (133, 53), (133, 51)], [(131, 56), (131, 58), (133, 58), (133, 56)], [(131, 61), (131, 63), (133, 63), (133, 61)], [(131, 66), (131, 68), (133, 68), (133, 66)], [(131, 71), (131, 73), (133, 73), (133, 71)], [(131, 76), (131, 78), (133, 78), (133, 76)], [(131, 81), (131, 83), (133, 83), (133, 81)], [(131, 86), (131, 88), (133, 88), (133, 86)], [(131, 91), (131, 93), (133, 93), (133, 91)], [(131, 96), (131, 98), (133, 98), (133, 96)], [(136, 1), (136, 3), (138, 3), (138, 1)], [(136, 6), (136, 8), (138, 8), (138, 6)], [(136, 11), (136, 13), (138, 13), (138, 11)], [(136, 16), (136, 18), (138, 18), (138, 16)], [(136, 21), (136, 23), (138, 23), (138, 21)], [(136, 26), (136, 28), (138, 28), (138, 26)], [(136, 31), (136, 33), (138, 33), (138, 31)], [(136, 36), (136, 38), (138, 38), (138, 36)], [(136, 41), (136, 43), (138, 43), (138, 41)], [(136, 46), (136, 48), (138, 48), (138, 46)], [(136, 51), (136, 53), (138, 53), (138, 51)], [(136, 56), (136, 58), (138, 58), (138, 56)], [(136, 61), (136, 63), (138, 63), (138, 61)], [(136, 66), (136, 68), (138, 68), (138, 66)], [(136, 71), (136, 73), (138, 73), (138, 71)], [(136, 76), (136, 78), (138, 78), (138, 76)], [(136, 81), (136, 83), (138, 83), (138, 81)], [(136, 86), (136, 88), (138, 88), (138, 86)], [(136, 91), (136, 93), (138, 93), (138, 91)], [(136, 96), (136, 98), (138, 98), (138, 96)], [(141, 1), (141, 3), (143, 3), (143, 1)], [(141, 6), (141, 8), (143, 8), (143, 6)], [(141, 11), (141, 13), (143, 13), (143, 11)], [(141, 16), (141, 18), (143, 18), (143, 16)], [(141, 21), (141, 23), (143, 23), (143, 21)], [(141, 26), (141, 28), (143, 28), (143, 26)], [(141, 31), (141, 33), (143, 33), (143, 31)], [(141, 36), (141, 38), (143, 38), (143, 36)], [(141, 41), (141, 43), (143, 43), (143, 41)], [(141, 46), (141, 48), (143, 48), (143, 46)], [(141, 51), (141, 53), (143, 53), (143, 51)], [(141, 56), (141, 58), (143, 58), (143, 56)], [(141, 61), (141, 63), (143, 63), (143, 61)], [(141, 66), (141, 68), (143, 68), (143, 66)], [(141, 71), (141, 73), (143, 73), (143, 71)], [(141, 76), (141, 78), (143, 78), (143, 76)], [(141, 81), (141, 83), (143, 83), (143, 81)], [(141, 86), (141, 88), (143, 88), (143, 86)], [(141, 91), (141, 93), (143, 93), (143, 91)], [(141, 96), (141, 98), (143, 98), (143, 96)], [(146, 1), (146, 3), (148, 3), (148, 1)], [(146, 6), (146, 8), (148, 8), (148, 6)], [(146, 11), (146, 13), (148, 13), (148, 11)], [(146, 16), (146, 18), (148, 18), (148, 16)], [(146, 21), (146, 23), (148, 23), (148, 21)], [(146, 26), (146, 28), (148, 28), (148, 26)], [(146, 31), (146, 33), (148, 33), (148, 31)], [(146, 36), (146, 38), (148, 38), (148, 36)], [(146, 41), (146, 43), (148, 43), (148, 41)], [(146, 46), (146, 48), (148, 48), (148, 46)], [(146, 51), (146, 53), (148, 53), (148, 51)], [(146, 56), (146, 58), (148, 58), (148, 56)], [(146, 61), (146, 63), (148, 63), (148, 61)], [(146, 66), (146, 68), (148, 68), (148, 66)], [(146, 71), (146, 73), (148, 73), (148, 71)], [(146, 76), (146, 78), (148, 78), (148, 76)], [(146, 81), (146, 83), (148, 83), (148, 81)], [(146, 86), (146, 88), (148, 88), (148, 86)], [(146, 91), (146, 93), (148, 93), (148, 91)], [(146, 96), (146, 98), (148, 98), (148, 96)], [(151, 1), (151, 3), (153, 3), (153, 1)], [(151, 6), (151, 8), (153, 8), (153, 6)], [(151, 11), (151, 13), (153, 13), (153, 11)], [(151, 16), (151, 18), (153, 18), (153, 16)], [(151, 21), (151, 23), (153, 23), (153, 21)], [(151, 26), (151, 28), (153, 28), (153, 26)], [(151, 31), (151, 33), (153, 33), (153, 31)], [(151, 36), (151, 38), (153, 38), (153, 36)], [(151, 41), (151, 43), (153, 43), (153, 41)], [(151, 46), (151, 48), (153, 48), (153, 46)], [(151, 51), (151, 53), (153, 53), (153, 51)], [(151, 56), (151, 58), (153, 58), (153, 56)], [(151, 61), (151, 63), (153, 63), (153, 61)], [(151, 66), (151, 68), (153, 68), (153, 66)], [(151, 71), (151, 73), (153, 73), (153, 71)], [(151, 76), (151, 78), (153, 78), (153, 76)], [(151, 81), (151, 83), (153, 83), (153, 81)], [(151, 86), (151, 88), (153, 88), (153, 86)], [(151, 91), (151, 93), (153, 93), (153, 91)], [(151, 96), (151, 98), (153, 98), (153, 96)], [(156, 1), (156, 3), (158, 3), (158, 1)], [(156, 6), (156, 8), (158, 8), (158, 6)], [(156, 11), (156, 13), (158, 13), (158, 11)], [(156, 16), (156, 18), (158, 18), (158, 16)], [(156, 21), (156, 23), (158, 23), (158, 21)], [(156, 26), (156, 28), (158, 28), (158, 26)], [(156, 31), (156, 33), (158, 33), (158, 31)], [(156, 36), (156, 38), (158, 38), (158, 36)], [(156, 41), (156, 43), (158, 43), (158, 41)], [(156, 46), (156, 48), (158, 48), (158, 46)], [(156, 51), (156, 53), (158, 53), (158, 51)], [(156, 56), (156, 58), (158, 58), (158, 56)], [(156, 61), (156, 63), (158, 63), (158, 61)], [(156, 66), (156, 68), (158, 68), (158, 66)], [(156, 71), (156, 73), (158, 73), (158, 71)], [(156, 76), (156, 78), (158, 78), (158, 76)], [(156, 81), (156, 83), (158, 83), (158, 81)], [(156, 86), (156, 88), (158, 88), (158, 86)], [(156, 91), (156, 93), (158, 93), (158, 91)], [(156, 96), (156, 98), (158, 98), (158, 96)], [(161, 1), (161, 3), (163, 3), (163, 1)], [(161, 6), (161, 8), (163, 8), (163, 6)], [(161, 11), (161, 13), (163, 13), (163, 11)], [(161, 16), (161, 18), (163, 18), (163, 16)], [(161, 21), (161, 23), (163, 23), (163, 21)], [(161, 26), (161, 28), (163, 28), (163, 26)], [(161, 31), (161, 33), (163, 33), (163, 31)], [(161, 36), (161, 38), (163, 38), (163, 36)], [(161, 41), (161, 43), (163, 43), (163, 41)], [(161, 46), (161, 48), (163, 48), (163, 46)], [(161, 51), (161, 53), (163, 53), (163, 51)], [(161, 56), (161, 58), (163, 58), (163, 56)], [(161, 61), (161, 63), (163, 63), (163, 61)], [(161, 66), (161, 68), (163, 68), (163, 66)], [(161, 71), (161, 73), (163, 73), (163, 71)], [(161, 76), (161, 78), (163, 78), (163, 76)], [(161, 81), (161, 83), (163, 83), (163, 81)], [(161, 86), (161, 88), (163, 88), (163, 86)], [(161, 91), (161, 93), (163, 93), (163, 91)], [(161, 96), (161, 98), (163, 98), (163, 96)], [(166, 1), (166, 3), (168, 3), (168, 1)], [(166, 6), (166, 8), (168, 8), (168, 6)], [(166, 11), (166, 13), (168, 13), (168, 11)], [(166, 16), (166, 18), (168, 18), (168, 16)], [(166, 21), (166, 23), (168, 23), (168, 21)], [(166, 26), (166, 28), (168, 28), (168, 26)], [(166, 31), (166, 33), (168, 33), (168, 31)], [(166, 36), (166, 38), (168, 38), (168, 36)], [(166, 41), (166, 43), (168, 43), (168, 41)], [(166, 46), (166, 48), (168, 48), (168, 46)], [(166, 51), (166, 53), (168, 53), (168, 51)], [(166, 56), (166, 58), (168, 58), (168, 56)], [(166, 61), (166, 63), (168, 63), (168, 61)], [(166, 66), (166, 68), (168, 68), (168, 66)], [(166, 71), (166, 73), (168, 73), (168, 71)], [(166, 76), (166, 78), (168, 78), (168, 76)], [(166, 81), (166, 83), (168, 83), (168, 81)], [(166, 86), (166, 88), (168, 88), (168, 86)], [(166, 91), (166, 93), (168, 93), (168, 91)], [(166, 96), (166, 98), (168, 98), (168, 96)], [(171, 1), (171, 3), (173, 3), (173, 1)], [(171, 6), (171, 8), (173, 8), (173, 6)], [(171, 11), (171, 13), (173, 13), (173, 11)], [(171, 16), (171, 18), (173, 18), (173, 16)], [(171, 21), (171, 23), (173, 23), (173, 21)], [(171, 26), (171, 28), (173, 28), (173, 26)], [(171, 31), (171, 33), (173, 33), (173, 31)], [(171, 36), (171, 38), (173, 38), (173, 36)], [(171, 41), (171, 43), (173, 43), (173, 41)], [(171, 46), (171, 48), (173, 48), (173, 46)], [(171, 51), (171, 53), (173, 53), (173, 51)], [(171, 56), (171, 58), (173, 58), (173, 56)], [(171, 61), (171, 63), (173, 63), (173, 61)], [(171, 66), (171, 68), (173, 68), (173, 66)], [(171, 71), (171, 73), (173, 73), (173, 71)], [(171, 76), (171, 78), (173, 78), (173, 76)], [(171, 81), (171, 83), (173, 83), (173, 81)], [(171, 86), (171, 88), (173, 88), (173, 86)], [(171, 91), (171, 93), (173, 93), (173, 91)], [(171, 96), (171, 98), (173, 98), (173, 96)], [(176, 1), (176, 3), (178, 3), (178, 1)], [(176, 6), (176, 8), (178, 8), (178, 6)], [(176, 11), (176, 13), (178, 13), (178, 11)], [(176, 16), (176, 18), (178, 18), (178, 16)], [(176, 21), (176, 23), (178, 23), (178, 21)], [(176, 26), (176, 28), (178, 28), (178, 26)], [(176, 31), (176, 33), (178, 33), (178, 31)], [(176, 36), (176, 38), (178, 38), (178, 36)], [(176, 41), (176, 43), (178, 43), (178, 41)], [(176, 46), (176, 48), (178, 48), (178, 46)], [(176, 51), (176, 53), (178, 53), (178, 51)], [(176, 56), (176, 58), (178, 58), (178, 56)], [(176, 61), (176, 63), (178, 63), (178, 61)], [(176, 66), (176, 68), (178, 68), (178, 66)], [(176, 71), (176, 73), (178, 73), (178, 71)], [(176, 76), (176, 78), (178, 78), (178, 76)], [(176, 81), (176, 83), (178, 83), (178, 81)], [(176, 86), (176, 88), (178, 88), (178, 86)], [(176, 91), (176, 93), (178, 93), (178, 91)], [(176, 96), (176, 98), (178, 98), (178, 96)], [(181, 1), (181, 3), (183, 3), (183, 1)], [(181, 6), (181, 8), (183, 8), (183, 6)], [(181, 11), (181, 13), (183, 13), (183, 11)], [(181, 16), (181, 18), (183, 18), (183, 16)], [(181, 21), (181, 23), (183, 23), (183, 21)], [(181, 26), (181, 28), (183, 28), (183, 26)], [(181, 31), (181, 33), (183, 33), (183, 31)], [(181, 36), (181, 38), (183, 38), (183, 36)], [(181, 41), (181, 43), (183, 43), (183, 41)], [(181, 46), (181, 48), (183, 48), (183, 46)], [(181, 51), (181, 53), (183, 53), (183, 51)], [(181, 56), (181, 58), (183, 58), (183, 56)], [(181, 61), (181, 63), (183, 63), (183, 61)], [(181, 66), (181, 68), (183, 68), (183, 66)], [(181, 71), (181, 73), (183, 73), (183, 71)], [(181, 76), (181, 78), (183, 78), (183, 76)], [(181, 81), (181, 83), (183, 83), (183, 81)], [(181, 86), (181, 88), (183, 88), (183, 86)], [(181, 91), (181, 93), (183, 93), (183, 91)], [(181, 96), (181, 98), (183, 98), (183, 96)], [(186, 1), (186, 3), (188, 3), (188, 1)], [(186, 6), (186, 8), (188, 8), (188, 6)], [(186, 11), (186, 13), (188, 13), (188, 11)], [(186, 16), (186, 18), (188, 18), (188, 16)], [(186, 21), (186, 23), (188, 23), (188, 21)], [(186, 26), (186, 28), (188, 28), (188, 26)], [(186, 31), (186, 33), (188, 33), (188, 31)], [(186, 36), (186, 38), (188, 38), (188, 36)], [(186, 41), (186, 43), (188, 43), (188, 41)], [(186, 46), (186, 48), (188, 48), (188, 46)], [(186, 51), (186, 53), (188, 53), (188, 51)], [(186, 56), (186, 58), (188, 58), (188, 56)], [(186, 61), (186, 63), (188, 63), (188, 61)], [(186, 66), (186, 68), (188, 68), (188, 66)], [(186, 71), (186, 73), (188, 73), (188, 71)], [(186, 76), (186, 78), (188, 78), (188, 76)], [(186, 81), (186, 83), (188, 83), (188, 81)], [(186, 86), (186, 88), (188, 88), (188, 86)], [(186, 91), (186, 93), (188, 93), (188, 91)], [(186, 96), (186, 98), (188, 98), (188, 96)], [(191, 1), (191, 3), (193, 3), (193, 1)], [(191, 6), (191, 8), (193, 8), (193, 6)], [(191, 11), (191, 13), (193, 13), (193, 11)], [(191, 16), (191, 18), (193, 18), (193, 16)], [(191, 21), (191, 23), (193, 23), (193, 21)], [(191, 26), (191, 28), (193, 28), (193, 26)], [(191, 31), (191, 33), (193, 33), (193, 31)], [(191, 36), (191, 38), (193, 38), (193, 36)], [(191, 41), (191, 43), (193, 43), (193, 41)], [(191, 46), (191, 48), (193, 48), (193, 46)], [(191, 51), (191, 53), (193, 53), (193, 51)], [(191, 56), (191, 58), (193, 58), (193, 56)], [(191, 61), (191, 63), (193, 63), (193, 61)], [(191, 66), (191, 68), (193, 68), (193, 66)], [(191, 71), (191, 73), (193, 73), (193, 71)], [(191, 76), (191, 78), (193, 78), (193, 76)], [(191, 81), (191, 83), (193, 83), (193, 81)], [(191, 86), (191, 88), (193, 88), (193, 86)], [(191, 91), (191, 93), (193, 93), (193, 91)], [(191, 96), (191, 98), (193, 98), (193, 96)], [(196, 1), (196, 3), (198, 3), (198, 1)], [(196, 6), (196, 8), (198, 8), (198, 6)], [(196, 11), (196, 13), (198, 13), (198, 11)], [(196, 16), (196, 18), (198, 18), (198, 16)], [(196, 21), (196, 23), (198, 23), (198, 21)], [(196, 26), (196, 28), (198, 28), (198, 26)], [(196, 31), (196, 33), (198, 33), (198, 31)], [(196, 36), (196, 38), (198, 38), (198, 36)], [(196, 41), (196, 43), (198, 43), (198, 41)], [(196, 46), (196, 48), (198, 48), (198, 46)], [(196, 51), (196, 53), (198, 53), (198, 51)], [(196, 56), (196, 58), (198, 58), (198, 56)], [(196, 61), (196, 63), (198, 63), (198, 61)], [(196, 66), (196, 68), (198, 68), (198, 66)], [(196, 71), (196, 73), (198, 73), (198, 71)], [(196, 76), (196, 78), (198, 78), (198, 76)], [(196, 81), (196, 83), (198, 83), (198, 81)], [(196, 86), (196, 88), (198, 88), (198, 86)], [(196, 91), (196, 93), (198, 93), (198, 91)], [(196, 96), (196, 98), (198, 98), (198, 96)]]

maze, start, end = grid.generate(200, 100, polygons), (4, 4), (195, 95)

img_array = viz.generate_image(maze, start, end)
utils.render_image(img_array)

Test Case/Grid 4: Logos and patterns

In [238]:
"""
polygons = []
# row top
y = 10
polygons.extend([[(6 + i, y), (14 + i, y - 8), (22 + i, y), (19 + i, y + 8), (9 + i, y + 8)] for i in range(0, 200 - 16, 21)])
y = 18
polygons.extend([[(6 + i, y + 10), (14 + i, y - 4), (22 + i, y + 10)] for i in range(10, 200 - 30, 21)])
# row bottom
y = 78
polygons.extend([[(6 + i, y), (14 + i, y - 8), (22 + i, y), (19 + i, y + 8), (9 + i, y + 8)] for i in range(0, 200 - 16, 21)])
y = 86
polygons.extend([[(6 + i, y + 10), (14 + i, y - 4), (22 + i, y + 10)] for i in range(10, 200 - 30, 21)])

# triforce
x, y = 30, 50
polygons.extend([
    [(x, y), (x + 6, y - 13), (x + 12, y)],
    [(x - 7, y + 15), (x + 6 - 7, y + 2), (x + 12 - 7, y + 15)],
    [(x + 7, y + 15), (x + 6 + 7, y + 2), (x + 12 + 7, y + 15)]
])

# lambda
x, y = 85, 38
polygons.extend([
    [(x, y), (x + 10, y), (x + 16, y + 20), (x + 18, y + 18), (x + 20, y + 22), (x + 14, y + 26),
     (x + 9, y + 10), (x + 4, y + 26), (x, y + 26), (x + 6, y + 9), (x + 6, y + 4), (x, y + 4)
    ],
])

# tetrimino
x, y = 140, 40
polygons.extend([
    [(x, y), (x + 10, y), (x + 10, y + 10), (x, y + 10)],
    [(x + 10, y), (x + 10 + 10, y), (x + 10 + 10, y + 10), (x + 10, y + 10)],
    [(x + 10, y + 10), (x + 10 + 10, y + 10), (x + 10 + 10, y + 10 + 10), (x + 10, y + 10 + 10)],
    [(x + 10 + 10, y + 10), (x + 10 + 10 + 10, y + 10), (x + 10 + 10 + 10, y + 10 + 10), (x + 10 + 10, y + 10 + 10)],
])
"""

polygons = [[(6, 10), (14, 2), (22, 10), (19, 18), (9, 18)], [(27, 10), (35, 2), (43, 10), (40, 18), (30, 18)], [(48, 10), (56, 2), (64, 10), (61, 18), (51, 18)], [(69, 10), (77, 2), (85, 10), (82, 18), (72, 18)], [(90, 10), (98, 2), (106, 10), (103, 18), (93, 18)], [(111, 10), (119, 2), (127, 10), (124, 18), (114, 18)], [(132, 10), (140, 2), (148, 10), (145, 18), (135, 18)], [(153, 10), (161, 2), (169, 10), (166, 18), (156, 18)], [(174, 10), (182, 2), (190, 10), (187, 18), (177, 18)], [(16, 28), (24, 14), (32, 28)], [(37, 28), (45, 14), (53, 28)], [(58, 28), (66, 14), (74, 28)], [(79, 28), (87, 14), (95, 28)], [(100, 28), (108, 14), (116, 28)], [(121, 28), (129, 14), (137, 28)], [(142, 28), (150, 14), (158, 28)], [(163, 28), (171, 14), (179, 28)], [(6, 78), (14, 70), (22, 78), (19, 86), (9, 86)], [(27, 78), (35, 70), (43, 78), (40, 86), (30, 86)], [(48, 78), (56, 70), (64, 78), (61, 86), (51, 86)], [(69, 78), (77, 70), (85, 78), (82, 86), (72, 86)], [(90, 78), (98, 70), (106, 78), (103, 86), (93, 86)], [(111, 78), (119, 70), (127, 78), (124, 86), (114, 86)], [(132, 78), (140, 70), (148, 78), (145, 86), (135, 86)], [(153, 78), (161, 70), (169, 78), (166, 86), (156, 86)], [(174, 78), (182, 70), (190, 78), (187, 86), (177, 86)], [(16, 96), (24, 82), (32, 96)], [(37, 96), (45, 82), (53, 96)], [(58, 96), (66, 82), (74, 96)], [(79, 96), (87, 82), (95, 96)], [(100, 96), (108, 82), (116, 96)], [(121, 96), (129, 82), (137, 96)], [(142, 96), (150, 82), (158, 96)], [(163, 96), (171, 82), (179, 96)], [(30, 50), (36, 37), (42, 50)], [(23, 65), (29, 52), (35, 65)], [(37, 65), (43, 52), (49, 65)], [(85, 38), (95, 38), (101, 58), (103, 56), (105, 60), (99, 64), (94, 48), (89, 64), (85, 64), (91, 47), (91, 42), (85, 42)], [(140, 40), (150, 40), (150, 50), (140, 50)], [(150, 40), (160, 40), (160, 50), (150, 50)], [(150, 50), (160, 50), (160, 60), (150, 60)], [(160, 50), (170, 50), (170, 60), (160, 60)]]

maze, start, end = grid.generate(200, 100, polygons), (2, 2), (195, 95)

img_array = viz.generate_image(maze, start, end)
utils.render_image(img_array)

Test Case/Grid 5: I <3 CS 180

In [336]:
polygons = [
    [(60, 5), (66, 5), (66, 36), (60, 36)], #I
    [(104, 47), (127, 27), (127, 5), (111, 5), (104, 15), (103, 15), (96, 5),
    (80, 5), (80, 27),(103,47)], # <3
    [
        (51, 66), (50, 55), (48, 55), (47, 52), (45, 52), (45, 50), (36, 50), (31, 55),
        (31, 83), (36, 88), (45, 88), (50, 83), (50, 72), (43, 72), (43, 82), (37, 82),
        (37, 56), (43, 56), (43, 66)
    ], # C
    [(74, 61), (74, 52), (69, 52), (69, 50), (60, 50), (60, 52), (58, 52), (58, 55), (56, 55),
    (56, 64), (58, 64), (58, 68), (63, 68), (63, 71), (68, 71), (68, 73), (70, 73), (70, 82),
    (62, 82), (62, 77), (56, 77), (56, 83), (58, 83), (58, 86), (60, 86), (60, 88), (72, 88),
    (72, 86), (74, 86), (74, 83), (77, 83), (77, 72), (74, 72),
    (74, 69), (72, 69), (72, 67), (67, 67), (67, 65), (64, 65), (64, 62),
    (62, 62), (62, 56), (67, 56),
    (68, 61)],  #S
    [
        (95, 88), (101, 88), (101, 50), (95, 50)
    ], # 1
    [(114, 50), (109, 55), (109, 66), (112, 66), (112, 69), (109, 69), (109, 83), (114, 88),
    (123, 88), (128, 83), (128, 69), (126, 69), (126, 66), (128, 66), (128, 55), (123, 50)], # 8
    [(117, 54), (121, 54), (121, 65), (117, 65)], [(117, 72), (121,72), (121, 83), (117, 83)], # 8 holes
    [(136, 50), (155, 50), (155, 88), (136, 88)], # 0
    [(143, 54), (148, 54), (148, 83), (143, 83)] # 0 hole
]


maze, start, end = grid.generate(200, 100, polygons), (2, 2), (195, 95)

img_array = viz.generate_image(maze, start, end)
utils.render_image(img_array)

Let's see how our search algorithms handle these test cases.

In [ ]:


This is a post in the CS 180 Pathfinding series.
Other posts in this series:

Arian Valdez @Secretmapper

React.JS and Node.JS Software engineering consultant. Developer/Designer Hybrid. Author of Alt Tracker, Combustion, Riyu, etc.