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