Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- data = [[54, 95, 98, 26, 3, 39, 77, 30, 83, 62, 20, 92, 61, 59, 26, 63, 92, 49, 38, 51, 99, 64, 65, 52, 98, 18, 90, 97, 96, 13, 74, 3, 88, 88, 67, 10],
- [49, 13, 73, 54, 4, 98, 36, 33, 12, 22, 35, 18, 39, 83, 92, 77, 50, 77, 57, 64, 0, 35, 86, 98, 28, 1, 53, 59, 28, 33, 56, 37, 98, 26, 81, 13],
- [95, 84, 44, 16, 42, 73, 0, 53, 14, 63, 81, 91, 42, 14, 13, 59, 91, 24, 99, 71, 73, 34, 60, 65, 82, 55, 16, 75, 7, 18, 68, 6, 61, 6, 80, 41],
- [27, 63, 35, 81, 56, 24, 70, 27, 59, 13, 36, 62, 73, 6, 61, 86, 48, 40, 88, 71, 52, 1, 9, 57, 50, 40, 20, 10, 3, 29, 19, 94, 99, 8, 74, 83],
- [46, 75, 78, 14, 89, 76, 37, 26, 85, 78, 81, 27, 99, 41, 96, 52, 21, 65, 71, 48, 60, 32, 48, 31, 85, 35, 88, 5, 78, 22, 31, 97, 43, 80, 52, 45],
- [0, 98, 50, 12, 0, 83, 46, 66, 67, 23, 52, 55, 41, 95, 5, 17, 78, 98, 74, 45, 97, 98, 96, 54, 48, 79, 29, 0, 73, 6, 16, 33, 20, 88, 9, 23],
- [9, 2, 10, 57, 79, 65, 65, 0, 19, 64, 3, 18, 20, 93, 10, 30, 9, 0, 40, 51, 87, 34, 52, 71, 28, 23, 73, 61, 77, 60, 66, 91, 57, 58, 2, 9],
- [27, 63, 51, 6, 3, 10, 7, 36, 80, 51, 93, 71, 73, 25, 3, 77, 35, 56, 36, 36, 77, 97, 14, 1, 78, 83, 5, 51, 99, 5, 93, 90, 1, 36, 83, 4],
- [89, 94, 67, 64, 31, 66, 59, 16, 80, 22, 78, 72, 56, 83, 98, 10, 9, 57, 23, 4, 80, 37, 65, 30, 71, 55, 42, 9, 60, 18, 39, 58, 44, 79, 48, 29],
- [79, 51, 3, 82, 81, 58, 99, 88, 54, 88, 81, 5, 63, 79, 52, 64, 48, 64, 68, 11, 50, 66, 35, 71, 9, 86, 11, 97, 42, 41, 0, 2, 56, 38, 15, 63],
- [94, 35, 12, 94, 79, 40, 91, 45, 37, 98, 43, 30, 80, 81, 87, 19, 74, 87, 93, 35, 88, 89, 79, 44, 6, 87, 27, 49, 98, 44, 68, 39, 42, 87, 61, 84],
- [5, 37, 89, 80, 31, 40, 1, 10, 54, 67, 23, 1, 75, 43, 49, 27, 29, 69, 43, 41, 7, 16, 63, 70, 5, 61, 74, 87, 2, 61, 50, 72, 91, 56, 12, 99],
- [43, 35, 83, 94, 69, 45, 76, 73, 83, 60, 80, 31, 59, 34, 39, 63, 35, 13, 94, 78, 2, 24, 87, 21, 36, 38, 55, 19, 10, 82, 13, 95, 88, 54, 94, 75],
- [66, 10, 58, 21, 82, 10, 32, 91, 66, 65, 3, 12, 4, 38, 12, 96, 55, 54, 73, 16, 74, 41, 28, 49, 19, 98, 16, 90, 93, 82, 56, 68, 14, 70, 31, 19],
- [13, 79, 47, 31, 79, 31, 56, 65, 94, 73, 57, 35, 74, 85, 84, 39, 24, 26, 12, 56, 46, 46, 71, 0, 57, 61, 77, 32, 14, 1, 81, 71, 69, 66, 57, 69],
- [8, 39, 23, 14, 88, 44, 81, 46, 5, 26, 50, 11, 71, 19, 86, 33, 88, 62, 81, 13, 60, 96, 7, 78, 6, 88, 77, 94, 74, 63, 48, 40, 29, 47, 64, 6],
- [95, 36, 61, 3, 75, 84, 95, 8, 57, 42, 43, 77, 27, 65, 56, 78, 34, 96, 18, 23, 46, 17, 86, 17, 89, 28, 96, 18, 24, 90, 93, 49, 47, 69, 91, 48],
- [76, 95, 10, 10, 58, 67, 25, 41, 0, 49, 13, 40, 59, 29, 62, 64, 97, 47, 22, 42, 39, 44, 16, 95, 23, 91, 14, 48, 90, 39, 16, 92, 46, 38, 49, 16],
- [60, 42, 28, 28, 61, 10, 37, 90, 99, 9, 45, 15, 61, 20, 6, 89, 99, 5, 34, 28, 58, 45, 10, 43, 73, 5, 45, 78, 68, 48, 44, 56, 78, 69, 52, 99],
- [99, 92, 63, 87, 23, 73, 25, 25, 31, 97, 14, 12, 77, 96, 73, 80, 86, 15, 63, 71, 44, 34, 51, 28, 77, 24, 19, 74, 87, 34, 59, 40, 82, 13, 25, 15],
- [48, 59, 63, 45, 51, 64, 88, 99, 81, 29, 69, 27, 7, 28, 9, 77, 50, 80, 7, 64, 3, 24, 6, 22, 31, 69, 92, 66, 13, 3, 70, 81, 73, 50, 45, 42],
- [0, 49, 29, 50, 38, 38, 24, 71, 8, 5, 56, 6, 90, 2, 3, 35, 40, 89, 24, 27, 74, 77, 54, 7, 1, 76, 92, 16, 55, 23, 47, 62, 33, 1, 80, 47],
- [1, 61, 12, 89, 56, 47, 88, 63, 73, 49, 9, 78, 68, 69, 19, 53, 76, 39, 49, 83, 38, 70, 62, 79, 19, 7, 70, 4, 90, 57, 90, 20, 52, 37, 64, 17],
- [0, 99, 18, 20, 0, 5, 93, 66, 87, 4, 62, 47, 94, 27, 73, 82, 12, 37, 39, 63, 59, 71, 71, 36, 84, 53, 90, 93, 9, 21, 94, 76, 80, 4, 40, 30],
- [57, 17, 99, 26, 7, 0, 81, 29, 95, 51, 46, 8, 16, 19, 15, 48, 89, 65, 69, 14, 94, 9, 3, 78, 59, 20, 41, 45, 97, 99, 57, 52, 94, 12, 55, 28],
- [19, 49, 58, 20, 73, 65, 0, 72, 82, 12, 64, 43, 34, 58, 11, 74, 20, 75, 0, 23, 6, 25, 81, 39, 44, 65, 54, 57, 72, 72, 10, 69, 31, 10, 45, 20],
- [68, 46, 13, 68, 81, 62, 28, 75, 66, 91, 27, 31, 20, 38, 1, 45, 76, 79, 14, 62, 58, 66, 17, 79, 61, 91, 86, 33, 57, 95, 74, 7, 31, 85, 97, 80],
- [67, 31, 55, 44, 11, 39, 50, 79, 64, 75, 97, 13, 22, 19, 42, 58, 55, 10, 51, 37, 73, 55, 22, 40, 35, 97, 77, 92, 43, 24, 69, 25, 64, 61, 48, 77],
- [7, 17, 84, 29, 87, 12, 85, 22, 65, 70, 73, 14, 32, 9, 27, 3, 11, 42, 88, 20, 37, 10, 88, 77, 68, 92, 71, 80, 83, 32, 35, 85, 91, 52, 26, 73],
- [62, 24, 97, 27, 49, 2, 50, 36, 14, 59, 63, 1, 45, 98, 80, 64, 59, 80, 55, 96, 87, 89, 19, 81, 40, 31, 73, 48, 29, 34, 63, 11, 12, 7, 84, 28],
- [23, 82, 3, 66, 59, 65, 49, 80, 16, 73, 39, 69, 45, 15, 6, 14, 4, 97, 76, 57, 34, 13, 77, 72, 98, 24, 34, 54, 23, 41, 67, 6, 80, 19, 30, 92],
- [20, 35, 58, 63, 21, 75, 58, 8, 30, 44, 97, 21, 3, 86, 78, 89, 93, 42, 29, 89, 53, 17, 89, 6, 8, 14, 48, 98, 15, 58, 28, 46, 51, 55, 17, 78],
- [42, 41, 8, 12, 37, 81, 33, 58, 59, 31, 3, 67, 77, 90, 6, 2, 14, 45, 49, 28, 79, 93, 7, 75, 52, 52, 46, 86, 98, 77, 66, 38, 41, 11, 41, 2],
- [8, 45, 28, 85, 58, 99, 18, 86, 95, 16, 59, 45, 26, 35, 36, 96, 61, 82, 32, 20, 62, 47, 93, 3, 44, 71, 11, 11, 31, 28, 42, 7, 18, 58, 40, 89],
- [87, 4, 99, 46, 73, 27, 7, 44, 26, 62, 15, 10, 14, 77, 97, 70, 58, 23, 85, 73, 76, 97, 6, 92, 52, 51, 9, 84, 29, 56, 15, 38, 41, 7, 88, 76],
- [30, 0, 80, 70, 10, 78, 91, 80, 3, 42, 24, 70, 39, 7, 7, 43, 9, 2, 23, 96, 76, 87, 19, 11, 5, 10, 74, 10, 49, 16, 34, 54, 40, 55, 75, 93],
- [92, 54, 58, 53, 99, 84, 53, 50, 56, 65, 10, 89, 19, 2, 6, 94, 44, 69, 67, 60, 79, 5, 30, 23, 15, 8, 48, 26, 32, 31, 43, 59, 81, 9, 67, 93],
- [7, 58, 97, 4, 22, 36, 5, 83, 32, 69, 83, 54, 18, 48, 49, 43, 36, 37, 96, 0, 28, 18, 64, 56, 52, 97, 43, 95, 36, 8, 48, 35, 60, 41, 48, 81],
- [50, 78, 66, 51, 45, 80, 65, 87, 0, 5, 87, 91, 34, 78, 47, 89, 51, 32, 88, 64, 52, 8, 86, 59, 11, 5, 1, 12, 57, 87, 75, 83, 17, 69, 96, 61],
- [74, 18, 35, 33, 97, 4, 22, 39, 41, 10, 66, 59, 11, 71, 90, 28, 78, 66, 51, 25, 48, 89, 74, 62, 13, 19, 67, 99, 19, 88, 15, 83, 26, 86, 31, 93],
- [93, 32, 27, 13, 61, 53, 49, 35, 59, 13, 54, 68, 75, 31, 18, 79, 33, 59, 87, 86, 14, 26, 21, 19, 12, 59, 75, 36, 7, 71, 25, 25, 6, 85, 29, 99],
- [94, 78, 11, 70, 49, 22, 25, 67, 34, 65, 85, 58, 76, 10, 44, 22, 75, 72, 65, 54, 68, 60, 84, 52, 19, 26, 61, 69, 88, 76, 37, 41, 81, 1, 23, 57],
- [15, 72, 24, 37, 95, 16, 76, 61, 34, 47, 68, 93, 18, 92, 32, 17, 20, 66, 51, 33, 65, 38, 71, 45, 81, 59, 34, 35, 84, 37, 14, 6, 41, 60, 57, 54],
- [83, 86, 73, 77, 75, 67, 5, 92, 43, 13, 98, 92, 69, 80, 50, 25, 64, 0, 64, 25, 98, 40, 66, 77, 4, 18, 52, 50, 28, 36, 17, 54, 5, 83, 2, 40],
- [25, 68, 57, 61, 55, 81, 56, 71, 95, 72, 37, 21, 91, 8, 23, 26, 38, 44, 45, 84, 37, 51, 13, 42, 90, 12, 67, 21, 96, 31, 99, 97, 2, 90, 99, 56],
- [47, 90, 19, 59, 82, 32, 52, 99, 74, 8, 93, 18, 79, 22, 24, 63, 84, 50, 55, 86, 94, 23, 83, 65, 67, 48, 16, 15, 81, 78, 7, 43, 12, 52, 58, 28],
- [54, 39, 86, 53, 24, 55, 72, 2, 6, 15, 78, 8, 35, 70, 59, 80, 74, 99, 95, 32, 44, 26, 47, 49, 48, 14, 95, 66, 54, 76, 37, 81, 85, 37, 45, 7],
- [19, 38, 6, 31, 71, 53, 40, 85, 71, 52, 56, 25, 78, 32, 17, 85, 42, 24, 61, 42, 3, 54, 98, 68, 48, 39, 59, 59, 12, 25, 96, 98, 15, 88, 44, 45],
- [62, 70, 19, 57, 56, 68, 7, 13, 53, 87, 68, 69, 77, 39, 23, 94, 42, 10, 1, 28, 43, 31, 42, 48, 75, 95, 28, 10, 44, 50, 72, 47, 64, 96, 5, 63],
- [92, 85, 77, 92, 90, 27, 39, 57, 51, 41, 99, 78, 78, 53, 88, 59, 30, 65, 15, 25, 32, 32, 99, 64, 90, 40, 13, 45, 41, 73, 98, 12, 44, 73, 33, 32],
- [97, 36, 97, 58, 74, 56, 70, 80, 92, 84, 93, 16, 0, 34, 96, 85, 84, 16, 29, 22, 27, 42, 26, 40, 27, 80, 1, 40, 82, 25, 54, 31, 77, 25, 67, 73],
- [46, 91, 13, 50, 65, 68, 44, 15, 65, 58, 77, 21, 92, 70, 69, 95, 9, 84, 69, 71, 53, 65, 0, 33, 95, 4, 1, 28, 62, 27, 39, 38, 47, 39, 61, 81],
- [37, 0, 70, 66, 14, 20, 50, 68, 8, 0, 62, 41, 68, 35, 14, 69, 94, 62, 53, 84, 32, 22, 80, 81, 22, 66, 36, 65, 40, 53, 93, 0, 0, 33, 32, 7],
- [68, 73, 37, 13, 86, 20, 22, 97, 27, 10, 32, 57, 27, 11, 52, 7, 7, 48, 23, 14, 98, 25, 41, 6, 78, 63, 80, 38, 24, 75, 2, 61, 45, 93, 18, 94],
- [20, 14, 76, 73, 80, 30, 56, 33, 80, 18, 79, 66, 39, 3, 88, 25, 28, 24, 63, 88, 68, 28, 67, 49, 6, 18, 4, 49, 0, 96, 11, 22, 6, 41, 17, 50],
- [9, 61, 45, 7, 25, 86, 99, 39, 79, 13, 46, 74, 44, 3, 90, 43, 25, 9, 2, 27, 13, 15, 38, 98, 2, 88, 13, 51, 44, 80, 67, 85, 84, 40, 2, 68],
- [22, 48, 11, 46, 99, 88, 75, 32, 69, 66, 73, 10, 3, 31, 13, 44, 11, 17, 68, 0, 37, 86, 40, 92, 13, 61, 24, 69, 22, 11, 53, 1, 14, 53, 96, 29],
- [65, 27, 91, 56, 76, 11, 86, 34, 3, 15, 97, 42, 19, 98, 38, 78, 90, 37, 76, 55, 46, 18, 72, 92, 3, 38, 55, 54, 5, 0, 58, 24, 77, 70, 65, 55],
- [33, 48, 21, 34, 42, 60, 82, 33, 98, 27, 51, 33, 74, 55, 59, 96, 44, 35, 23, 28, 13, 52, 72, 9, 39, 52, 8, 30, 40, 8, 97, 43, 79, 89, 38, 80],
- [1, 29, 67, 37, 13, 29, 33, 96, 91, 24, 4, 67, 20, 71, 75, 95, 2, 63, 39, 14, 88, 2, 5, 17, 38, 40, 74, 79, 39, 62, 38, 58, 74, 4, 27, 97],
- [86, 8, 5, 54, 58, 78, 70, 51, 89, 94, 51, 55, 27, 6, 56, 44, 14, 72, 5, 27, 19, 50, 72, 58, 66, 24, 49, 28, 15, 12, 12, 37, 85, 89, 53, 38],
- [54, 1, 82, 23, 72, 55, 6, 96, 54, 22, 19, 63, 83, 50, 39, 75, 33, 29, 83, 14, 60, 92, 62, 83, 11, 34, 53, 77, 57, 63, 18, 17, 50, 9, 90, 36],
- [60, 78, 25, 81, 18, 1, 96, 39, 36, 82, 23, 78, 70, 80, 19, 55, 74, 38, 99, 37, 3, 87, 21, 26, 93, 89, 44, 13, 95, 92, 11, 71, 77, 10, 49, 90],
- [68, 68, 45, 82, 67, 7, 97, 49, 87, 83, 73, 70, 70, 87, 14, 37, 10, 21, 82, 71, 75, 13, 89, 93, 63, 11, 40, 18, 32, 69, 38, 53, 81, 63, 51, 76],
- [25, 36, 27, 62, 4, 51, 50, 74, 19, 10, 78, 94, 15, 49, 11, 26, 91, 80, 61, 80, 84, 87, 80, 52, 35, 28, 64, 91, 39, 58, 15, 55, 26, 72, 68, 35],
- [42, 66, 36, 17, 5, 31, 38, 90, 61, 8, 24, 0, 7, 40, 65, 67, 54, 61, 53, 16, 49, 76, 21, 63, 23, 72, 20, 9, 42, 34, 10, 6, 63, 25, 61, 28],
- [9, 98, 52, 95, 85, 61, 87, 96, 64, 98, 98, 83, 88, 4, 73, 29, 26, 67, 59, 34, 89, 49, 6, 16, 0, 61, 55, 76, 73, 64, 26, 63, 56, 64, 66, 86],
- [98, 2, 10, 34, 9, 10, 8, 46, 2, 95, 89, 65, 49, 1, 38, 15, 8, 22, 66, 80, 7, 77, 77, 70, 1, 7, 60, 59, 93, 7, 2, 98, 31, 95, 87, 18],
- [47, 20, 77, 92, 92, 78, 81, 7, 34, 20, 30, 40, 56, 79, 86, 84, 81, 40, 19, 28, 72, 35, 20, 85, 3, 68, 18, 4, 63, 83, 20, 12, 41, 63, 19, 58],
- [55, 10, 67, 18, 31, 16, 76, 57, 79, 64, 68, 37, 78, 60, 60, 46, 49, 32, 32, 3, 65, 74, 22, 79, 26, 29, 28, 86, 20, 99, 27, 99, 28, 30, 54, 20],
- [73, 87, 66, 32, 10, 75, 40, 94, 30, 99, 52, 10, 33, 33, 52, 36, 16, 90, 68, 62, 19, 33, 50, 22, 78, 47, 91, 22, 84, 83, 41, 17, 32, 83, 38, 23],
- [82, 26, 41, 53, 71, 22, 95, 55, 60, 14, 40, 42, 36, 43, 91, 50, 16, 93, 62, 72, 3, 14, 55, 48, 20, 17, 56, 38, 64, 87, 86, 92, 82, 75, 73, 76],
- [70, 18, 42, 41, 19, 44, 8, 90, 10, 73, 41, 39, 23, 69, 64, 55, 39, 80, 88, 13, 5, 29, 71, 53, 84, 71, 91, 97, 60, 67, 10, 15, 53, 37, 68, 91],
- [12, 99, 93, 43, 63, 51, 54, 89, 39, 8, 19, 27, 70, 94, 0, 70, 76, 1, 51, 30, 60, 88, 24, 69, 35, 36, 97, 43, 0, 70, 21, 84, 19, 6, 93, 92],
- [15, 83, 14, 61, 0, 18, 77, 34, 95, 92, 22, 76, 54, 9, 22, 43, 96, 91, 24, 12, 30, 22, 88, 72, 82, 38, 27, 10, 41, 2, 78, 25, 36, 20, 70, 55],
- [83, 6, 84, 58, 57, 42, 76, 75, 36, 39, 98, 55, 72, 72, 84, 81, 36, 9, 3, 44, 1, 50, 63, 1, 93, 24, 26, 20, 30, 68, 0, 24, 90, 26, 6, 88],
- [58, 38, 65, 42, 40, 25, 32, 39, 19, 31, 74, 36, 85, 74, 23, 20, 37, 41, 41, 63, 61, 9, 27, 39, 22, 0, 36, 34, 53, 53, 6, 40, 81, 18, 86, 8],
- [34, 1, 53, 24, 53, 46, 21, 59, 74, 75, 10, 49, 79, 74, 29, 68, 82, 75, 49, 62, 8, 58, 54, 34, 87, 4, 84, 34, 10, 82, 70, 35, 62, 9, 33, 77],
- [28, 49, 3, 98, 69, 36, 80, 53, 72, 68, 89, 22, 40, 52, 5, 66, 39, 38, 41, 45, 13, 12, 70, 12, 7, 86, 95, 83, 66, 92, 43, 13, 53, 80, 75, 33],
- [98, 98, 88, 3, 11, 32, 83, 24, 91, 79, 3, 55, 50, 95, 41, 69, 30, 89, 68, 47, 13, 35, 0, 86, 57, 8, 10, 31, 1, 40, 81, 2, 87, 10, 73, 0],
- [36, 8, 65, 86, 88, 65, 19, 33, 62, 24, 98, 34, 0, 80, 45, 53, 16, 28, 41, 65, 93, 34, 64, 85, 48, 98, 15, 51, 41, 65, 5, 9, 51, 17, 17, 91],
- [21, 49, 80, 99, 8, 32, 11, 36, 82, 59, 64, 59, 55, 73, 1, 23, 82, 59, 19, 16, 58, 18, 62, 36, 74, 30, 72, 79, 26, 31, 16, 40, 2, 27, 65, 26],
- [86, 24, 59, 75, 93, 17, 20, 42, 21, 4, 80, 0, 57, 91, 81, 84, 95, 13, 65, 85, 9, 15, 26, 90, 66, 20, 13, 98, 67, 27, 85, 49, 45, 65, 10, 84],
- [17, 16, 99, 46, 21, 66, 57, 69, 29, 42, 50, 92, 9, 11, 56, 62, 32, 15, 55, 25, 55, 90, 81, 74, 62, 98, 58, 65, 46, 77, 53, 10, 0, 59, 70, 91],
- [76, 89, 89, 89, 87, 87, 11, 51, 11, 44, 11, 50, 29, 88, 93, 31, 6, 26, 74, 34, 24, 30, 14, 74, 9, 47, 20, 17, 88, 14, 49, 87, 3, 65, 27, 73],
- [18, 18, 68, 23, 13, 98, 52, 92, 72, 75, 8, 8, 2, 33, 69, 23, 22, 16, 95, 76, 43, 83, 86, 27, 4, 58, 57, 97, 64, 22, 43, 32, 41, 2, 88, 26],
- [21, 20, 85, 29, 56, 31, 65, 45, 58, 26, 62, 21, 71, 31, 5, 57, 88, 42, 51, 39, 79, 83, 47, 99, 25, 31, 9, 24, 13, 63, 95, 78, 80, 74, 78, 89],
- [39, 90, 68, 22, 85, 14, 4, 20, 41, 51, 67, 75, 20, 48, 91, 65, 61, 44, 66, 3, 83, 30, 93, 23, 19, 99, 46, 88, 87, 35, 3, 88, 35, 67, 88, 28],
- [63, 21, 64, 10, 7, 38, 25, 17, 32, 36, 7, 99, 46, 65, 74, 71, 63, 42, 30, 72, 29, 80, 42, 65, 27, 24, 16, 16, 70, 2, 54, 60, 35, 79, 88, 39],
- [10, 75, 23, 44, 33, 33, 11, 13, 23, 3, 44, 37, 64, 66, 35, 32, 34, 22, 18, 15, 6, 37, 25, 36, 20, 4, 49, 58, 59, 21, 80, 95, 0, 31, 93, 28],
- [54, 30, 99, 86, 7, 38, 8, 18, 26, 83, 15, 83, 45, 5, 24, 67, 6, 39, 65, 67, 83, 99, 29, 41, 64, 62, 25, 53, 54, 34, 24, 41, 99, 28, 8, 29],
- [30, 60, 67, 20, 43, 56, 79, 43, 92, 85, 69, 9, 62, 22, 62, 24, 68, 33, 18, 61, 25, 14, 21, 59, 86, 59, 53, 26, 1, 80, 9, 36, 4, 5, 85, 47],
- [57, 64, 8, 17, 69, 23, 77, 29, 69, 52, 80, 86, 18, 93, 78, 17, 36, 60, 94, 25, 80, 90, 87, 86, 64, 23, 87, 95, 19, 69, 91, 82, 37, 27, 27, 46],
- [52, 19, 54, 87, 1, 4, 41, 68, 93, 56, 36, 13, 32, 25, 83, 48, 59, 5, 37, 58, 83, 93, 53, 77, 44, 63, 49, 1, 94, 4, 28, 30, 85, 15, 85, 90],
- [75, 72, 89, 33, 98, 23, 81, 41, 35, 17, 4, 1, 46, 60, 83, 69, 27, 35, 33, 83, 61, 61, 21, 72, 82, 72, 82, 6, 59, 51, 60, 37, 82, 20, 88, 54],
- [20, 37, 13, 75, 81, 78, 36, 75, 22, 45, 81, 63, 58, 72, 81, 7, 9, 39, 49, 8, 84, 66, 71, 58, 41, 56, 5, 2, 83, 47, 16, 3, 93, 95, 97, 10],
- [94, 83, 74, 92, 8, 10, 12, 92, 28, 28, 31, 98, 10, 33, 62, 70, 85, 53, 8, 31, 75, 67, 38, 2, 5, 85, 44, 25, 54, 69, 33, 61, 75, 57, 79, 82],
- [60, 34, 79, 9, 2, 28, 80, 24, 2, 76, 26, 34, 61, 22, 40, 31, 52, 14, 30, 2, 88, 54, 41, 73, 6, 45, 13, 22, 70, 51, 74, 69, 19, 66, 33, 78],
- [3, 11, 50, 41, 23, 41, 45, 2, 62, 95, 55, 73, 1, 98, 33, 68, 82, 96, 24, 81, 1, 58, 59, 41, 45, 9, 99, 49, 16, 97, 54, 75, 92, 14, 71, 63],
- [18, 73, 63, 61, 88, 15, 27, 49, 82, 95, 0, 54, 71, 76, 64, 65, 84, 39, 61, 56, 52, 60, 88, 92, 75, 83, 94, 61, 76, 76, 14, 11, 5, 95, 71, 68],]
- template = """
- decdef Idx as {0..5}.
- decdef Num as {<NUMBERS>}.
- declare grid: Idx, Idx -> Num.
- declare multiplicity: Num -> {1..<MAXMULT>}.
- define multiplicity as {<MULT>} default 1.
- // Each number has exactly its multiplicity in the grid
- forall n where Num(n):
- count [grid(r,c)=n for r,c where Idx(r) and Idx(c)] = multiplicity(n).
- // Each row is descendingly sorted
- forall r where Idx(r):
- forall c where Idx(c) and c<5:
- grid(r,c) > grid(r,c+1).
- // Each column is descendingly sorted
- forall c where Idx(c):
- forall r where Idx(r) and r<5:
- grid(r,c) > grid(r+1,c).
- """
- from collections import Counter
- import subprocess
- def checkgrid(sequence, grid):
- nums = sorted([x for row in grid for x in row])
- if nums != sorted(sequence):
- return False
- for row in grid:
- if row != sorted(row, reverse=True):
- return False
- for i in range(0, 6):
- col = [row[i] for row in grid]
- if col != sorted(col, reverse=True):
- return False
- return True
- total_impossible = 0
- for idx,sequence in enumerate(data):
- # Create the ManyWorlds program
- counts = Counter(sequence)
- spec = template
- spec = spec.replace("<NUMBERS>", ", ".join(str(k) for k in counts.keys()))
- spec = spec.replace("<MAXMULT>", str(max(counts.values())))
- spec = spec.replace(
- "<MULT>", ", ".join(f"({k},{v})" for k, v in counts.items() if v > 1)
- )
- # Run the ManyWorlds program
- res = subprocess.run(
- ["./ManyWorlds", "--stream-input", "find"],
- input=spec,
- text=True,
- capture_output=True,
- )
- # Parse the output and print in desired format
- if "FOUND UNSATISFIABILITY" in res.stdout:
- print(idx,"impossible")
- total_impossible += 1
- else:
- grid = []
- for i in range(0, 6):
- grid.append([-1] * 6)
- for line in res.stdout.splitlines():
- if not line.startswith("define grid as"):
- continue
- for tup in line.split("{(")[1].split(")}")[0].split("),("):
- t = tuple(int(x) for x in tup.split(","))
- grid[t[0]][t[1]] = t[2]
- assert checkgrid(sequence, grid) # Always good to run a check ;)
- print(idx,grid)
- print("total impossible:", total_impossible)
Advertisement
Add Comment
Please, Sign In to add comment