diff --git a/benchmarks/multi_node/srt-slurm-recipes/configs/moe_load_balancer_ctx_ep4_384.yaml b/benchmarks/multi_node/srt-slurm-recipes/configs/moe_load_balancer_ctx_ep4_384.yaml new file mode 100644 index 0000000000..293e803ea2 --- /dev/null +++ b/benchmarks/multi_node/srt-slurm-recipes/configs/moe_load_balancer_ctx_ep4_384.yaml @@ -0,0 +1,65 @@ +initial_global_assignments: + 0: [38, 95, 50, 47, 25, 15, 26, 53, 31, 9, 41, 71, 19, 4, 143, 108, 85, 44, 6, 8, 127, 66, 2, 33, 63, 17, 70, 112, 79, 96, 109, 21, 159, 186, 90, 114, 147, 169, 155, 136, 81, 103, 120, 234, 256, 37, 107, 223, 172, 175, 217, 238, 243, 206, 209, 174, 220, 271, 261, 307, 213, 273, 247, 258, 268, 231, 277, 255, 227, 242, 309, 280, 371, 299, 303, 305, 351, 313, 320, 329, 291, 244, 374, 340, 364, 276, 379, 228, 342, 250, 322, 368, 356, 373, 354, 380, 57, 51, 1, 35, 11, 52, 34, 7, 27, 56, 0, 76, 72, 74, 100, 163, 80, 102, 55, 97, 84, 59, 54, 78, 88, 134, 105, 142, 106, 92, 40, 62, 204, 222, 126, 111, 179, 158, 32, 173, 178, 118, 160, 210, 249, 282, 196, 190, 212, 157, 236, 191, 193, 208, 287, 253, 230, 199, 153, 165, 235, 293, 274, 286, 267, 200, 266, 265, 297, 224, 298, 285, 264, 296, 301, 300, 375, 319, 314, 284, 376, 292, 281, 383, 270, 336, 345, 316, 365, 321, 331, 348, 346, 370, 382, 355, 259, 339, 3, 10, 12, 18, 5, 28, 104, 20, 73, 117, 46, 87, 39, 94, 22, 99, 75, 86, 29, 119, 48, 42, 83, 58, 145, 122, 131, 141, 162, 36, 139, 113, 101, 116, 129, 207, 152, 154, 49, 128, 170, 167, 245, 146, 125, 197, 215, 194, 260, 185, 263, 216, 214, 161, 312, 219, 182, 202, 205, 254, 188, 252, 203, 240, 251, 272, 257, 248, 315, 294, 237, 317, 232, 311, 330, 343, 288, 341, 325, 302, 360, 226, 361, 349, 338, 352, 358, 357, 366, 344, 337, 372, 381, 362, 283, 324, 93, 164, 14, 13, 24, 61, 23, 16, 30, 211, 123, 166, 68, 43, 98, 45, 110, 89, 64, 144, 67, 77, 69, 121, 132, 130, 133, 138, 137, 65, 150, 115, 221, 183, 156, 91, 82, 168, 124, 148, 184, 181, 176, 140, 60, 149, 192, 198, 135, 151, 177, 171, 195, 187, 229, 201, 180, 304, 239, 308, 233, 353, 218, 334, 359, 347, 323, 189, 278, 269, 290, 241, 295, 246, 327, 275, 289, 225, 318, 350, 262, 335, 310, 279, 369, 367, 328, 306, 326, 333, 332, 363, 377, 378] + 1: [71, 41, 6, 3, 2, 51, 5, 61, 8, 109, 7, 23, 33, 189, 34, 45, 70, 66, 40, 104, 84, 31, 75, 44, 87, 85, 215, 123, 88, 36, 32, 67, 217, 133, 278, 184, 158, 204, 101, 94, 181, 115, 155, 127, 122, 185, 180, 209, 230, 198, 200, 168, 196, 177, 194, 273, 175, 228, 249, 195, 233, 235, 240, 254, 220, 244, 207, 205, 277, 236, 270, 324, 334, 268, 289, 313, 321, 279, 285, 316, 297, 343, 370, 362, 295, 261, 315, 284, 348, 307, 372, 323, 352, 345, 383, 381, 47, 13, 81, 22, 4, 83, 10, 80, 77, 42, 21, 60, 43, 56, 76, 89, 68, 57, 37, 113, 24, 28, 131, 146, 82, 93, 53, 74, 197, 121, 110, 154, 107, 125, 52, 135, 142, 174, 160, 105, 86, 99, 137, 124, 141, 172, 161, 227, 216, 186, 193, 192, 145, 260, 257, 201, 169, 301, 234, 247, 206, 237, 332, 165, 190, 253, 255, 294, 276, 241, 299, 203, 310, 263, 347, 287, 338, 300, 320, 357, 304, 319, 258, 280, 346, 358, 364, 265, 349, 356, 341, 354, 373, 380, 377, 368, 49, 360, 9, 17, 62, 30, 1, 38, 35, 50, 55, 48, 19, 143, 100, 117, 138, 72, 54, 18, 150, 106, 97, 98, 20, 151, 91, 112, 166, 136, 126, 229, 153, 114, 64, 15, 134, 92, 152, 78, 170, 132, 243, 191, 156, 245, 157, 250, 148, 162, 224, 210, 238, 187, 262, 208, 183, 159, 214, 242, 223, 226, 264, 283, 259, 330, 275, 219, 288, 318, 256, 353, 337, 351, 252, 371, 290, 314, 359, 350, 361, 282, 286, 293, 291, 382, 342, 340, 355, 335, 366, 374, 367, 379, 375, 363, 178, 303, 0, 11, 26, 12, 90, 27, 58, 144, 59, 120, 29, 46, 25, 118, 102, 173, 69, 119, 65, 79, 96, 39, 139, 108, 16, 103, 116, 14, 63, 73, 95, 163, 167, 179, 202, 246, 130, 188, 149, 251, 239, 140, 171, 129, 111, 221, 211, 248, 274, 128, 182, 147, 164, 176, 213, 212, 225, 218, 267, 231, 199, 365, 308, 266, 281, 271, 232, 296, 272, 302, 322, 317, 269, 222, 325, 309, 331, 311, 326, 292, 298, 305, 327, 339, 329, 378, 328, 344, 333, 306, 369, 312, 336, 376] + 2: [79, 33, 43, 22, 1, 76, 52, 14, 16, 40, 12, 20, 2, 0, 102, 44, 60, 34, 24, 83, 128, 50, 136, 78, 99, 54, 73, 143, 120, 122, 118, 107, 85, 88, 172, 137, 212, 153, 152, 138, 97, 178, 206, 163, 279, 188, 184, 146, 213, 174, 237, 113, 125, 242, 233, 285, 183, 284, 201, 259, 243, 229, 241, 264, 236, 234, 323, 203, 303, 275, 367, 249, 232, 281, 258, 338, 289, 265, 286, 305, 301, 345, 326, 378, 322, 380, 371, 347, 331, 336, 344, 315, 271, 310, 300, 375, 86, 39, 6, 28, 53, 35, 127, 46, 66, 94, 89, 109, 25, 30, 13, 47, 71, 90, 96, 27, 72, 9, 169, 67, 38, 131, 141, 92, 108, 110, 26, 100, 68, 139, 167, 150, 223, 158, 80, 202, 154, 185, 155, 246, 288, 200, 299, 124, 221, 191, 176, 215, 151, 69, 132, 210, 224, 280, 180, 220, 225, 317, 298, 319, 226, 197, 291, 340, 283, 294, 307, 218, 278, 346, 297, 261, 320, 235, 270, 357, 329, 348, 316, 293, 370, 360, 342, 376, 377, 328, 312, 335, 358, 372, 365, 379, 133, 296, 10, 87, 5, 36, 55, 42, 29, 11, 82, 106, 45, 41, 126, 74, 48, 64, 18, 119, 84, 121, 58, 21, 17, 192, 63, 101, 162, 81, 267, 61, 181, 98, 240, 222, 214, 166, 140, 145, 111, 129, 130, 194, 177, 269, 211, 175, 205, 247, 148, 302, 144, 216, 187, 251, 238, 164, 230, 263, 156, 195, 290, 250, 182, 217, 186, 273, 274, 333, 308, 373, 276, 268, 228, 311, 254, 350, 245, 309, 266, 256, 318, 349, 313, 327, 231, 364, 339, 381, 295, 314, 374, 366, 341, 383, 199, 123, 4, 77, 8, 7, 115, 15, 51, 93, 37, 23, 65, 70, 49, 3, 31, 56, 134, 104, 32, 19, 142, 114, 105, 75, 62, 165, 103, 161, 168, 149, 59, 117, 57, 112, 135, 171, 170, 160, 193, 95, 219, 91, 209, 190, 287, 173, 157, 196, 255, 147, 189, 207, 159, 116, 253, 204, 179, 198, 282, 227, 272, 257, 244, 277, 292, 208, 239, 324, 262, 252, 334, 248, 343, 351, 306, 304, 352, 321, 356, 325, 368, 382, 332, 337, 260, 361, 330, 353, 354, 369, 363, 359, 362, 355] + 3: [310, 31, 94, 115, 250, 234, 374, 298, 267, 215, 186, 178, 192, 111, 189, 255, 281, 341, 337, 237, 81, 108, 347, 145, 240, 181, 317, 150, 93, 218, 332, 19, 28, 152, 361, 333, 166, 48, 7, 98, 283, 91, 251, 14, 211, 68, 144, 174, 142, 129, 306, 30, 57, 101, 78, 140, 300, 327, 20, 83, 336, 233, 126, 254, 82, 214, 228, 88, 136, 256, 312, 320, 303, 64, 72, 23, 275, 22, 124, 307, 382, 271, 311, 288, 59, 167, 285, 41, 96, 259, 353, 355, 222, 244, 9, 188, 34, 131, 66, 231, 296, 180, 348, 314, 151, 242, 125, 24, 318, 169, 324, 219, 197, 26, 130, 173, 122, 322, 356, 375, 269, 342, 376, 17, 236, 331, 297, 6, 161, 168, 95, 351, 62, 294, 184, 42, 264, 109, 65, 252, 323, 87, 159, 373, 85, 113, 177, 5, 143, 195, 309, 345, 58, 112, 193, 279, 183, 258, 165, 227, 206, 172, 274, 148, 369, 284, 325, 55, 154, 338, 191, 368, 238, 352, 360, 276, 349, 262, 175, 127, 137, 107, 2, 33, 153, 203, 89, 12, 212, 185, 47, 209, 260, 377, 18, 302, 35, 304, 97, 182, 367, 0, 210, 179, 282, 220, 330, 170, 13, 248, 90, 326, 230, 119, 221, 277, 80, 245, 295, 201, 103, 235, 121, 315, 157, 354, 198, 141, 155, 102, 226, 118, 49, 202, 200, 346, 79, 69, 249, 133, 247, 60, 56, 340, 204, 305, 70, 362, 268, 138, 4, 50, 246, 289, 343, 381, 217, 253, 194, 61, 106, 67, 190, 84, 370, 187, 104, 110, 1, 313, 299, 290, 116, 278, 334, 216, 286, 366, 99, 357, 132, 53, 257, 329, 359, 241, 105, 117, 163, 40, 319, 51, 208, 27, 120, 365, 293, 16, 339, 380, 92, 139, 291, 158, 135, 21, 134, 223, 280, 378, 76, 272, 162, 160, 71, 328, 37, 10, 128, 25, 86, 176, 308, 321, 379, 213, 164, 207, 114, 270, 38, 36, 229, 74, 273, 364, 100, 73, 52, 3, 383, 171, 63, 224, 46, 8, 15, 75, 199, 11, 123, 149, 239, 32, 344, 225, 363, 358, 146, 77, 196, 43, 243, 372, 371, 232, 147, 45, 316, 54, 29, 265, 44, 39, 156, 287, 266, 301, 292, 205, 261, 335, 350, 263] + 4: [172, 18, 264, 302, 219, 205, 22, 62, 29, 105, 115, 362, 101, 91, 149, 253, 272, 226, 36, 284, 215, 103, 320, 250, 69, 262, 312, 23, 48, 167, 328, 26, 374, 276, 271, 142, 248, 348, 157, 59, 191, 98, 182, 51, 338, 33, 129, 109, 97, 79, 168, 42, 323, 65, 17, 74, 85, 108, 75, 10, 335, 216, 30, 270, 281, 122, 300, 173, 242, 256, 201, 80, 291, 334, 343, 9, 128, 372, 211, 373, 313, 368, 224, 336, 126, 305, 132, 234, 301, 100, 364, 285, 83, 104, 247, 299, 12, 230, 257, 27, 252, 353, 116, 160, 159, 117, 24, 243, 309, 355, 50, 214, 199, 113, 25, 370, 213, 326, 379, 210, 307, 86, 135, 61, 207, 194, 361, 64, 38, 96, 221, 288, 371, 47, 196, 204, 381, 231, 310, 46, 251, 15, 185, 354, 60, 333, 92, 187, 267, 295, 133, 63, 290, 198, 174, 147, 325, 94, 332, 227, 35, 28, 238, 158, 337, 127, 140, 308, 342, 45, 282, 352, 255, 297, 139, 183, 43, 349, 19, 16, 268, 192, 171, 20, 131, 32, 40, 314, 146, 58, 222, 351, 283, 82, 273, 369, 347, 244, 169, 189, 346, 356, 37, 163, 93, 202, 258, 155, 0, 165, 145, 70, 114, 344, 130, 357, 322, 340, 3, 162, 153, 166, 327, 66, 274, 197, 71, 263, 73, 84, 236, 112, 179, 88, 358, 55, 176, 76, 318, 217, 78, 110, 260, 241, 315, 365, 229, 339, 141, 4, 181, 56, 121, 203, 154, 178, 375, 378, 184, 2, 1, 175, 95, 341, 287, 49, 138, 294, 14, 266, 31, 316, 123, 363, 383, 180, 81, 292, 319, 311, 195, 89, 5, 90, 259, 120, 156, 360, 254, 13, 275, 188, 44, 228, 239, 54, 235, 293, 206, 34, 265, 161, 77, 136, 72, 324, 345, 246, 57, 111, 240, 212, 359, 237, 209, 152, 21, 376, 278, 150, 68, 148, 6, 7, 330, 124, 99, 137, 143, 53, 233, 67, 164, 377, 87, 329, 11, 366, 52, 280, 106, 269, 296, 232, 220, 151, 125, 289, 186, 170, 177, 303, 190, 41, 200, 286, 331, 350, 223, 118, 321, 298, 249, 218, 306, 261, 8, 208, 382, 119, 102, 380, 107, 144, 225, 279, 134, 367, 193, 304, 39, 245, 317, 277] + 5: [214, 133, 193, 178, 131, 67, 46, 242, 69, 161, 35, 41, 299, 365, 188, 209, 361, 45, 4, 11, 379, 314, 66, 330, 149, 47, 284, 257, 244, 168, 308, 117, 200, 38, 106, 2, 266, 378, 146, 90, 62, 323, 225, 121, 16, 152, 186, 343, 22, 277, 30, 377, 24, 143, 9, 337, 380, 344, 5, 359, 219, 222, 123, 31, 320, 335, 32, 169, 172, 158, 367, 185, 294, 3, 360, 201, 54, 10, 349, 70, 307, 354, 110, 28, 50, 205, 98, 270, 51, 75, 348, 23, 321, 223, 63, 177, 165, 274, 276, 352, 287, 249, 217, 129, 190, 346, 120, 301, 351, 280, 61, 243, 21, 293, 147, 333, 291, 198, 332, 124, 232, 305, 59, 65, 298, 40, 206, 261, 347, 211, 184, 238, 64, 366, 60, 334, 227, 93, 52, 207, 36, 42, 364, 180, 82, 103, 202, 135, 286, 164, 282, 92, 183, 283, 220, 89, 88, 94, 236, 15, 187, 71, 107, 251, 29, 44, 127, 373, 99, 345, 248, 336, 234, 350, 155, 278, 26, 302, 126, 57, 229, 109, 85, 116, 362, 150, 271, 295, 275, 111, 300, 318, 128, 230, 372, 304, 182, 262, 81, 265, 383, 241, 309, 199, 231, 108, 137, 181, 159, 154, 194, 324, 306, 114, 14, 329, 339, 357, 338, 78, 132, 279, 80, 355, 8, 144, 252, 134, 259, 381, 218, 290, 48, 136, 34, 53, 216, 105, 0, 119, 171, 166, 153, 233, 374, 55, 115, 20, 122, 228, 157, 56, 140, 341, 255, 325, 273, 316, 95, 224, 145, 6, 195, 104, 353, 382, 43, 18, 83, 73, 91, 268, 174, 162, 33, 375, 311, 97, 170, 281, 312, 141, 368, 226, 285, 125, 142, 196, 269, 296, 49, 246, 17, 138, 213, 74, 151, 79, 250, 156, 130, 258, 239, 163, 221, 342, 13, 1, 173, 191, 118, 27, 245, 319, 260, 264, 167, 19, 256, 39, 112, 84, 370, 327, 197, 215, 7, 272, 113, 204, 254, 77, 210, 179, 289, 58, 369, 76, 100, 235, 192, 303, 317, 322, 356, 253, 267, 212, 203, 176, 208, 189, 358, 297, 12, 315, 292, 160, 340, 139, 240, 328, 175, 148, 102, 237, 101, 313, 331, 288, 72, 371, 86, 68, 96, 310, 326, 247, 363, 87, 25, 37, 376, 263] + 6: [97, 299, 34, 159, 26, 197, 319, 269, 349, 113, 79, 118, 196, 300, 222, 236, 143, 192, 67, 83, 14, 17, 133, 244, 361, 165, 324, 266, 326, 290, 364, 158, 217, 357, 230, 82, 8, 234, 184, 362, 84, 284, 330, 153, 343, 202, 280, 381, 177, 295, 342, 146, 30, 11, 57, 18, 353, 61, 378, 328, 5, 262, 20, 213, 60, 114, 238, 240, 383, 4, 16, 52, 329, 71, 163, 107, 13, 130, 382, 95, 92, 140, 152, 369, 37, 70, 315, 72, 200, 356, 21, 161, 327, 93, 257, 323, 142, 259, 173, 282, 337, 359, 352, 220, 122, 336, 366, 216, 338, 41, 358, 379, 10, 102, 54, 39, 272, 287, 205, 116, 371, 195, 48, 306, 19, 321, 176, 144, 270, 370, 211, 252, 232, 85, 293, 87, 285, 298, 128, 348, 45, 296, 334, 203, 109, 275, 51, 110, 344, 154, 175, 308, 148, 178, 235, 320, 254, 126, 360, 58, 242, 132, 15, 372, 157, 258, 190, 55, 127, 261, 265, 335, 331, 237, 224, 297, 182, 214, 288, 186, 276, 25, 65, 106, 115, 98, 40, 167, 139, 53, 172, 191, 274, 246, 289, 239, 322, 281, 0, 253, 301, 137, 166, 80, 23, 350, 286, 46, 136, 171, 251, 345, 304, 76, 100, 256, 316, 367, 49, 47, 291, 221, 27, 339, 241, 162, 33, 117, 215, 278, 249, 78, 226, 307, 376, 271, 138, 69, 181, 310, 63, 32, 347, 111, 243, 50, 108, 210, 6, 193, 9, 218, 187, 123, 12, 283, 279, 198, 22, 129, 68, 223, 75, 77, 164, 81, 131, 86, 43, 346, 2, 56, 24, 292, 373, 227, 179, 255, 201, 7, 168, 89, 121, 355, 96, 303, 90, 124, 305, 44, 267, 260, 112, 375, 160, 174, 264, 151, 377, 311, 62, 103, 318, 169, 380, 155, 125, 149, 199, 120, 368, 119, 64, 206, 312, 248, 309, 277, 219, 231, 250, 141, 188, 268, 302, 73, 233, 341, 228, 59, 207, 332, 225, 66, 229, 88, 105, 208, 42, 101, 74, 99, 189, 36, 209, 263, 29, 313, 35, 31, 91, 94, 145, 365, 104, 185, 333, 183, 340, 354, 212, 245, 28, 180, 135, 314, 170, 134, 294, 325, 156, 351, 194, 38, 204, 374, 317, 247, 273, 3, 147, 150, 363, 1] + 7: [382, 113, 133, 238, 284, 331, 69, 0, 239, 11, 59, 9, 160, 190, 21, 336, 121, 302, 359, 198, 299, 12, 18, 268, 99, 247, 182, 270, 300, 203, 152, 166, 376, 70, 104, 38, 61, 132, 379, 373, 1, 196, 313, 237, 261, 167, 271, 372, 230, 235, 143, 318, 229, 227, 128, 31, 14, 374, 367, 5, 149, 266, 159, 179, 185, 255, 171, 162, 241, 234, 283, 106, 169, 35, 52, 364, 50, 26, 338, 164, 330, 127, 120, 346, 66, 175, 366, 151, 98, 222, 371, 215, 192, 375, 37, 273, 27, 49, 170, 358, 188, 72, 46, 294, 15, 354, 119, 64, 184, 301, 337, 315, 174, 228, 40, 56, 63, 33, 303, 28, 262, 368, 334, 129, 286, 218, 309, 25, 165, 140, 224, 253, 304, 91, 287, 312, 125, 122, 306, 290, 112, 344, 242, 142, 285, 278, 342, 195, 78, 260, 343, 20, 32, 267, 93, 254, 114, 172, 322, 316, 276, 90, 212, 47, 194, 139, 89, 233, 124, 34, 84, 220, 250, 281, 263, 4, 219, 307, 199, 54, 180, 248, 361, 102, 357, 365, 240, 178, 207, 2, 111, 60, 292, 329, 258, 48, 213, 216, 305, 333, 71, 321, 19, 126, 74, 80, 30, 360, 311, 154, 295, 36, 200, 76, 153, 347, 209, 41, 217, 136, 319, 24, 317, 138, 352, 29, 73, 370, 118, 275, 193, 280, 288, 277, 181, 383, 323, 353, 7, 202, 328, 380, 339, 349, 256, 362, 265, 272, 206, 55, 297, 39, 204, 369, 75, 44, 208, 131, 308, 43, 141, 53, 147, 325, 137, 134, 45, 65, 259, 96, 116, 177, 92, 156, 231, 115, 211, 22, 189, 341, 381, 245, 6, 236, 201, 348, 3, 157, 163, 274, 378, 356, 187, 282, 51, 100, 13, 155, 335, 130, 82, 326, 197, 355, 221, 150, 101, 23, 314, 340, 296, 77, 264, 279, 94, 291, 146, 289, 148, 107, 110, 324, 176, 320, 108, 168, 83, 16, 123, 183, 205, 85, 161, 244, 332, 105, 8, 327, 86, 293, 298, 214, 246, 226, 62, 191, 103, 158, 310, 17, 144, 252, 249, 95, 117, 186, 109, 10, 269, 42, 173, 210, 251, 351, 350, 79, 67, 81, 377, 87, 232, 58, 257, 225, 68, 363, 57, 135, 223, 97, 88, 243, 145, 345] + 8: [290, 17, 315, 35, 371, 367, 227, 351, 171, 335, 225, 131, 40, 185, 376, 337, 221, 352, 278, 275, 282, 329, 330, 263, 301, 12, 238, 92, 114, 245, 243, 271, 115, 137, 179, 224, 284, 287, 205, 308, 110, 177, 359, 383, 248, 264, 251, 162, 366, 222, 345, 332, 299, 147, 43, 239, 183, 109, 72, 55, 73, 2, 274, 23, 124, 283, 184, 253, 199, 328, 146, 24, 250, 188, 178, 244, 134, 192, 379, 59, 267, 145, 357, 44, 163, 97, 78, 54, 136, 270, 15, 216, 113, 214, 102, 26, 88, 231, 62, 336, 354, 249, 103, 158, 381, 27, 90, 52, 38, 309, 80, 82, 150, 8, 33, 129, 215, 10, 257, 241, 65, 194, 344, 360, 276, 6, 3, 219, 117, 382, 187, 125, 132, 280, 259, 81, 196, 209, 191, 144, 42, 247, 14, 139, 213, 237, 180, 198, 327, 343, 22, 1, 189, 272, 57, 197, 334, 260, 311, 133, 190, 324, 95, 340, 66, 300, 159, 63, 39, 348, 365, 338, 165, 25, 230, 29, 320, 30, 310, 305, 212, 46, 108, 151, 116, 5, 254, 206, 234, 314, 120, 369, 362, 312, 7, 353, 156, 152, 50, 18, 84, 61, 148, 223, 195, 94, 240, 279, 255, 153, 70, 289, 372, 228, 296, 377, 355, 37, 31, 293, 356, 122, 45, 319, 307, 74, 93, 331, 11, 16, 277, 138, 358, 246, 60, 322, 273, 75, 161, 235, 373, 193, 347, 341, 173, 140, 261, 0, 47, 13, 167, 292, 123, 258, 181, 361, 87, 236, 166, 252, 168, 34, 266, 96, 297, 176, 69, 226, 143, 19, 112, 182, 99, 56, 363, 174, 154, 298, 104, 204, 342, 142, 242, 317, 364, 58, 41, 378, 76, 218, 202, 333, 118, 281, 200, 201, 368, 83, 326, 36, 4, 21, 175, 164, 229, 288, 302, 172, 32, 119, 321, 380, 294, 85, 318, 53, 128, 339, 20, 269, 28, 127, 67, 130, 186, 316, 208, 374, 107, 313, 306, 325, 49, 286, 9, 77, 233, 111, 157, 126, 217, 79, 155, 106, 169, 291, 304, 98, 86, 100, 232, 89, 68, 51, 135, 64, 210, 323, 91, 256, 101, 303, 285, 346, 262, 211, 349, 350, 160, 220, 149, 121, 207, 203, 170, 268, 71, 48, 141, 295, 375, 265, 370, 105] + 9: [92, 186, 30, 259, 8, 339, 56, 263, 288, 183, 131, 75, 350, 228, 222, 184, 120, 98, 174, 180, 60, 167, 74, 311, 364, 119, 110, 323, 46, 65, 9, 99, 250, 343, 306, 315, 153, 81, 328, 262, 62, 318, 251, 195, 181, 378, 22, 163, 216, 330, 166, 38, 23, 31, 86, 194, 127, 309, 61, 133, 358, 232, 190, 287, 264, 185, 370, 290, 152, 44, 267, 349, 108, 204, 269, 238, 223, 95, 93, 173, 340, 295, 374, 169, 225, 373, 7, 66, 118, 43, 212, 336, 375, 149, 326, 240, 327, 353, 281, 132, 322, 35, 210, 192, 187, 170, 94, 129, 54, 324, 159, 29, 342, 314, 176, 172, 71, 144, 217, 58, 126, 70, 256, 199, 32, 218, 130, 16, 198, 76, 354, 73, 206, 227, 310, 123, 301, 366, 302, 164, 211, 27, 377, 252, 88, 379, 272, 21, 78, 2, 316, 233, 313, 33, 113, 91, 325, 168, 182, 96, 368, 137, 258, 329, 297, 361, 160, 77, 268, 352, 230, 89, 345, 294, 162, 300, 347, 67, 249, 236, 254, 175, 338, 265, 50, 4, 308, 201, 291, 202, 284, 26, 3, 331, 143, 355, 237, 17, 103, 191, 360, 36, 299, 219, 72, 20, 25, 148, 83, 231, 376, 253, 277, 307, 112, 372, 135, 296, 380, 381, 245, 111, 261, 128, 114, 208, 107, 156, 101, 97, 84, 134, 165, 117, 177, 178, 121, 155, 1, 18, 48, 64, 68, 157, 197, 12, 356, 273, 79, 285, 200, 154, 214, 109, 292, 39, 317, 41, 362, 209, 257, 146, 303, 193, 45, 52, 85, 205, 49, 226, 40, 141, 19, 63, 346, 53, 196, 348, 276, 282, 246, 279, 24, 122, 312, 55, 283, 57, 215, 260, 150, 138, 102, 80, 5, 104, 298, 239, 10, 321, 224, 87, 244, 371, 359, 221, 47, 289, 335, 274, 220, 37, 13, 139, 6, 275, 341, 367, 151, 363, 333, 344, 235, 243, 42, 125, 242, 247, 351, 382, 179, 337, 105, 14, 320, 189, 229, 207, 293, 136, 124, 203, 332, 213, 82, 255, 357, 0, 106, 278, 171, 234, 145, 100, 15, 369, 142, 280, 304, 266, 286, 69, 383, 140, 241, 34, 271, 334, 319, 188, 365, 270, 248, 305, 28, 90, 115, 158, 59, 147, 51, 116, 11, 161] + 10: [55, 61, 222, 353, 78, 262, 365, 69, 234, 227, 124, 293, 246, 289, 138, 8, 282, 109, 341, 113, 231, 181, 338, 40, 132, 223, 257, 306, 72, 116, 75, 184, 130, 240, 267, 148, 123, 220, 327, 188, 114, 210, 243, 256, 137, 214, 189, 252, 330, 121, 100, 37, 190, 265, 308, 297, 145, 153, 131, 346, 88, 167, 122, 202, 328, 313, 383, 26, 335, 93, 13, 52, 118, 381, 323, 261, 296, 260, 134, 147, 270, 303, 366, 173, 162, 336, 166, 233, 216, 369, 64, 357, 291, 209, 334, 292, 31, 321, 180, 91, 378, 73, 141, 249, 229, 281, 102, 59, 107, 199, 301, 105, 251, 170, 149, 94, 280, 354, 352, 279, 164, 111, 87, 304, 195, 219, 343, 32, 0, 363, 376, 161, 225, 203, 259, 95, 242, 367, 67, 187, 9, 171, 119, 117, 80, 263, 53, 16, 10, 333, 43, 54, 18, 41, 269, 298, 226, 294, 344, 355, 320, 213, 276, 35, 205, 255, 51, 272, 142, 197, 360, 200, 70, 299, 12, 198, 285, 120, 28, 311, 165, 89, 288, 155, 63, 151, 6, 68, 314, 183, 332, 339, 5, 250, 66, 309, 2, 258, 33, 144, 92, 264, 318, 90, 191, 215, 268, 337, 310, 248, 239, 74, 110, 271, 284, 221, 204, 156, 382, 317, 169, 283, 377, 127, 351, 302, 361, 182, 375, 211, 17, 373, 217, 76, 20, 96, 7, 15, 56, 207, 129, 380, 286, 84, 60, 368, 370, 364, 201, 325, 235, 237, 275, 290, 30, 44, 372, 295, 374, 196, 98, 125, 307, 287, 228, 238, 146, 186, 85, 324, 1, 79, 348, 58, 4, 193, 305, 38, 82, 340, 83, 86, 254, 23, 29, 350, 157, 277, 319, 115, 266, 192, 224, 177, 103, 345, 218, 247, 99, 158, 97, 57, 342, 108, 11, 274, 241, 101, 81, 65, 22, 106, 230, 326, 322, 152, 19, 174, 128, 316, 133, 315, 329, 126, 245, 143, 185, 379, 356, 3, 34, 25, 212, 312, 154, 47, 140, 362, 49, 112, 163, 24, 359, 62, 50, 77, 150, 45, 194, 206, 208, 175, 48, 300, 172, 349, 371, 139, 159, 21, 278, 104, 27, 39, 36, 253, 358, 71, 46, 168, 14, 347, 135, 331, 236, 178, 160, 244, 179, 176, 136, 232, 273, 42] + 11: [377, 4, 277, 186, 249, 60, 317, 107, 230, 143, 150, 374, 278, 95, 131, 217, 321, 298, 293, 69, 1, 280, 165, 59, 52, 187, 67, 285, 360, 160, 294, 250, 85, 282, 297, 267, 64, 37, 253, 256, 315, 25, 198, 255, 7, 279, 40, 91, 142, 370, 332, 367, 133, 199, 222, 261, 62, 364, 292, 363, 11, 63, 144, 151, 49, 32, 311, 174, 324, 197, 113, 304, 21, 192, 158, 41, 88, 163, 193, 289, 136, 206, 361, 175, 139, 48, 270, 226, 152, 8, 352, 371, 241, 355, 55, 348, 130, 203, 17, 339, 196, 128, 313, 271, 325, 66, 247, 349, 166, 101, 87, 378, 242, 123, 331, 219, 171, 356, 53, 168, 189, 28, 182, 376, 71, 216, 232, 248, 75, 92, 207, 35, 149, 93, 350, 375, 170, 24, 372, 214, 46, 81, 237, 20, 58, 223, 36, 51, 98, 329, 47, 141, 184, 57, 245, 266, 167, 19, 319, 109, 129, 12, 301, 134, 296, 177, 18, 290, 169, 183, 103, 263, 354, 191, 236, 288, 268, 155, 138, 260, 210, 383, 100, 148, 202, 265, 105, 72, 308, 33, 112, 120, 156, 234, 83, 110, 362, 326, 254, 213, 208, 194, 30, 238, 300, 220, 299, 264, 99, 10, 188, 27, 302, 291, 281, 172, 82, 45, 357, 345, 74, 330, 31, 34, 259, 190, 2, 157, 201, 369, 318, 185, 347, 159, 42, 84, 287, 275, 209, 153, 272, 68, 273, 231, 342, 161, 200, 106, 6, 212, 137, 127, 337, 116, 79, 276, 70, 50, 86, 303, 314, 77, 224, 76, 221, 38, 108, 366, 5, 295, 335, 351, 78, 135, 320, 286, 327, 205, 328, 102, 22, 215, 344, 96, 338, 181, 379, 9, 284, 29, 306, 145, 235, 56, 43, 258, 233, 121, 80, 228, 316, 26, 373, 309, 23, 322, 90, 119, 44, 180, 115, 65, 97, 173, 162, 211, 195, 229, 39, 154, 243, 251, 239, 218, 146, 164, 73, 380, 368, 176, 365, 257, 343, 125, 341, 381, 353, 111, 274, 336, 305, 340, 0, 246, 178, 104, 227, 3, 240, 117, 16, 54, 204, 310, 252, 94, 118, 307, 346, 358, 179, 89, 124, 147, 122, 283, 382, 312, 244, 140, 269, 15, 13, 262, 333, 359, 323, 225, 126, 132, 334, 114, 61, 14] + 12: [226, 20, 194, 300, 120, 298, 109, 71, 3, 304, 108, 185, 280, 39, 59, 127, 237, 9, 198, 227, 268, 294, 93, 86, 330, 41, 329, 245, 175, 49, 317, 148, 161, 96, 196, 151, 331, 69, 236, 52, 335, 53, 267, 88, 332, 92, 114, 381, 232, 338, 25, 33, 366, 363, 77, 371, 374, 130, 137, 85, 170, 31, 191, 351, 1, 79, 178, 10, 19, 216, 307, 24, 5, 115, 243, 12, 143, 375, 188, 252, 122, 149, 167, 179, 80, 16, 23, 354, 314, 42, 213, 259, 211, 352, 220, 285, 82, 292, 308, 218, 203, 90, 234, 51, 140, 337, 72, 172, 281, 373, 207, 370, 327, 320, 113, 233, 75, 286, 219, 125, 293, 166, 107, 155, 246, 176, 180, 301, 76, 276, 258, 102, 55, 289, 156, 362, 43, 94, 275, 359, 200, 2, 173, 18, 224, 206, 136, 240, 265, 202, 123, 63, 299, 353, 132, 279, 356, 382, 89, 100, 128, 57, 101, 134, 54, 310, 262, 215, 30, 334, 135, 323, 325, 221, 35, 269, 347, 44, 119, 67, 228, 74, 56, 27, 368, 217, 249, 117, 66, 165, 60, 162, 204, 341, 255, 112, 306, 378, 13, 247, 138, 346, 254, 208, 305, 355, 195, 110, 186, 361, 326, 22, 312, 64, 62, 129, 251, 193, 11, 87, 210, 263, 38, 40, 153, 222, 192, 144, 288, 169, 328, 164, 28, 177, 26, 48, 309, 111, 376, 116, 273, 163, 6, 383, 34, 365, 257, 379, 291, 32, 350, 160, 189, 121, 340, 318, 238, 159, 360, 84, 239, 266, 260, 98, 242, 61, 65, 142, 364, 278, 73, 146, 197, 70, 372, 377, 183, 58, 324, 336, 253, 342, 15, 154, 212, 303, 272, 145, 78, 287, 150, 158, 68, 50, 322, 147, 315, 201, 209, 133, 313, 81, 271, 270, 367, 230, 290, 274, 168, 36, 46, 103, 4, 344, 380, 321, 106, 99, 105, 21, 283, 229, 91, 174, 8, 250, 282, 277, 345, 45, 214, 181, 37, 357, 264, 316, 296, 311, 29, 83, 244, 14, 284, 205, 248, 339, 297, 190, 187, 235, 369, 124, 95, 302, 0, 171, 118, 97, 152, 256, 141, 343, 223, 131, 319, 7, 241, 126, 182, 47, 17, 348, 231, 139, 184, 225, 295, 333, 104, 358, 199, 261, 349, 157] + 13: [108, 46, 172, 186, 329, 340, 231, 363, 199, 316, 134, 228, 77, 16, 55, 244, 110, 86, 324, 318, 36, 6, 125, 201, 83, 348, 109, 277, 282, 314, 40, 335, 37, 266, 121, 364, 275, 333, 21, 205, 261, 61, 322, 300, 249, 81, 238, 260, 66, 339, 326, 288, 253, 50, 92, 285, 243, 270, 79, 38, 317, 360, 63, 279, 47, 240, 67, 303, 33, 1, 26, 115, 220, 194, 251, 357, 268, 283, 334, 310, 371, 367, 245, 53, 48, 168, 17, 44, 215, 258, 27, 129, 350, 341, 132, 302, 170, 328, 309, 179, 87, 273, 30, 373, 379, 319, 72, 0, 382, 200, 291, 307, 76, 184, 188, 353, 139, 153, 11, 234, 52, 198, 177, 35, 207, 267, 222, 185, 84, 25, 169, 352, 223, 226, 41, 361, 2, 297, 107, 94, 45, 305, 126, 144, 203, 128, 162, 164, 269, 88, 290, 362, 187, 299, 101, 232, 263, 225, 202, 74, 247, 190, 182, 271, 289, 209, 365, 359, 212, 10, 193, 127, 295, 150, 7, 280, 327, 3, 112, 28, 122, 167, 98, 105, 192, 29, 354, 381, 343, 377, 32, 59, 23, 298, 159, 8, 311, 111, 208, 151, 65, 211, 214, 284, 191, 369, 123, 338, 345, 91, 315, 31, 147, 149, 221, 248, 69, 135, 131, 141, 64, 210, 293, 272, 346, 296, 292, 213, 294, 197, 229, 89, 380, 176, 286, 224, 82, 24, 281, 257, 161, 54, 15, 183, 39, 233, 265, 100, 4, 57, 133, 137, 254, 113, 173, 347, 216, 22, 287, 375, 104, 73, 136, 374, 320, 13, 372, 330, 206, 140, 306, 241, 20, 142, 276, 78, 90, 155, 204, 181, 332, 250, 124, 130, 175, 378, 85, 152, 189, 12, 195, 102, 117, 304, 56, 358, 58, 342, 178, 93, 259, 116, 51, 143, 196, 239, 171, 321, 166, 96, 34, 97, 19, 337, 75, 355, 370, 323, 313, 246, 227, 174, 237, 68, 218, 71, 376, 301, 62, 242, 99, 42, 120, 154, 49, 180, 14, 236, 114, 119, 344, 219, 80, 43, 308, 5, 274, 264, 9, 138, 163, 230, 160, 235, 252, 312, 146, 157, 349, 368, 106, 118, 156, 336, 60, 256, 148, 325, 356, 262, 158, 18, 103, 351, 366, 255, 95, 165, 278, 383, 145, 331, 70, 217] + 14: [4, 147, 30, 14, 95, 291, 118, 34, 17, 90, 356, 215, 158, 23, 92, 62, 343, 342, 145, 284, 180, 324, 369, 312, 64, 16, 317, 250, 274, 272, 115, 134, 359, 51, 262, 252, 36, 325, 224, 368, 183, 160, 285, 378, 290, 87, 24, 382, 381, 89, 277, 102, 94, 232, 57, 348, 333, 303, 136, 276, 365, 351, 119, 1, 82, 367, 98, 32, 165, 88, 74, 194, 326, 223, 96, 231, 211, 3, 323, 18, 28, 172, 146, 293, 263, 171, 138, 42, 46, 176, 195, 20, 111, 72, 106, 120, 204, 164, 110, 261, 151, 184, 213, 127, 238, 91, 375, 142, 141, 313, 139, 355, 362, 75, 71, 206, 58, 298, 220, 301, 268, 318, 38, 334, 199, 25, 275, 222, 257, 376, 198, 269, 345, 86, 60, 170, 167, 254, 350, 270, 280, 190, 66, 309, 247, 22, 129, 202, 152, 366, 173, 322, 300, 209, 246, 240, 187, 191, 329, 236, 225, 321, 93, 7, 192, 255, 135, 282, 193, 357, 133, 201, 159, 319, 320, 346, 84, 245, 85, 143, 39, 360, 336, 260, 363, 178, 289, 100, 188, 216, 140, 181, 70, 126, 163, 383, 2, 128, 8, 40, 349, 227, 5, 79, 80, 354, 44, 63, 149, 125, 234, 150, 217, 273, 109, 308, 56, 379, 296, 104, 116, 6, 361, 239, 278, 101, 226, 352, 200, 197, 248, 305, 169, 76, 105, 97, 212, 218, 182, 373, 307, 11, 54, 267, 327, 253, 137, 364, 335, 338, 286, 251, 130, 81, 205, 243, 21, 340, 153, 259, 26, 235, 256, 47, 59, 131, 249, 315, 265, 132, 48, 108, 10, 310, 229, 53, 112, 228, 304, 68, 113, 203, 50, 65, 210, 73, 337, 295, 15, 117, 122, 344, 287, 13, 271, 154, 377, 177, 370, 294, 99, 244, 156, 69, 242, 281, 380, 237, 279, 374, 347, 330, 161, 83, 341, 372, 186, 175, 283, 49, 266, 208, 157, 52, 185, 103, 162, 41, 207, 311, 297, 358, 123, 332, 77, 230, 35, 107, 124, 214, 0, 299, 19, 241, 43, 233, 33, 258, 168, 37, 55, 196, 353, 9, 316, 306, 288, 61, 148, 114, 155, 166, 144, 27, 264, 292, 314, 121, 302, 12, 221, 29, 67, 219, 371, 179, 189, 31, 45, 78, 331, 174, 339, 328] + 15: [11, 353, 24, 168, 128, 56, 344, 329, 265, 13, 173, 231, 284, 10, 145, 267, 273, 96, 257, 238, 63, 213, 84, 161, 382, 74, 2, 71, 282, 7, 122, 305, 317, 224, 266, 285, 249, 380, 303, 343, 377, 372, 188, 254, 274, 186, 70, 126, 34, 46, 379, 152, 64, 356, 142, 191, 360, 192, 318, 327, 44, 9, 85, 331, 205, 3, 123, 270, 118, 129, 89, 75, 21, 347, 132, 260, 314, 110, 154, 146, 0, 247, 354, 310, 237, 229, 239, 6, 223, 345, 374, 103, 61, 29, 328, 208, 362, 232, 359, 38, 376, 253, 197, 8, 133, 319, 246, 212, 109, 290, 134, 150, 114, 51, 16, 262, 309, 80, 258, 88, 138, 291, 251, 31, 272, 158, 54, 297, 332, 67, 203, 361, 187, 233, 346, 378, 202, 321, 235, 90, 250, 165, 40, 174, 119, 330, 198, 55, 53, 95, 1, 299, 112, 236, 25, 338, 92, 289, 184, 211, 12, 77, 121, 37, 227, 315, 226, 170, 127, 264, 69, 141, 322, 276, 23, 375, 201, 143, 45, 325, 62, 30, 140, 189, 179, 182, 139, 159, 218, 336, 176, 286, 15, 199, 28, 190, 200, 117, 350, 308, 5, 48, 252, 14, 94, 35, 39, 351, 326, 167, 334, 296, 248, 106, 66, 381, 280, 111, 65, 293, 68, 97, 169, 300, 204, 256, 306, 108, 153, 183, 155, 196, 365, 86, 164, 216, 302, 120, 207, 244, 107, 339, 73, 368, 221, 156, 185, 163, 316, 342, 50, 281, 72, 383, 181, 98, 349, 225, 60, 271, 57, 49, 341, 220, 367, 295, 312, 195, 259, 355, 58, 288, 166, 131, 81, 78, 292, 275, 18, 137, 219, 100, 136, 358, 144, 268, 269, 42, 151, 105, 217, 115, 313, 255, 324, 352, 148, 83, 240, 76, 4, 335, 357, 298, 320, 215, 277, 307, 193, 261, 20, 52, 340, 113, 373, 36, 32, 172, 209, 99, 26, 116, 371, 241, 287, 263, 177, 333, 82, 33, 149, 43, 214, 243, 311, 157, 206, 323, 171, 175, 59, 102, 147, 364, 337, 234, 230, 101, 41, 242, 369, 135, 366, 104, 222, 22, 194, 370, 294, 87, 130, 160, 279, 27, 124, 178, 301, 304, 210, 228, 79, 93, 245, 125, 283, 278, 348, 180, 162, 91, 363, 17, 47, 19] + 16: [15, 374, 287, 348, 310, 134, 216, 301, 189, 92, 11, 379, 346, 331, 56, 135, 233, 305, 241, 9, 286, 187, 274, 185, 360, 212, 285, 342, 252, 238, 357, 315, 248, 129, 102, 57, 139, 227, 278, 265, 12, 246, 222, 340, 306, 220, 253, 194, 79, 131, 270, 191, 4, 314, 363, 288, 177, 329, 132, 181, 105, 334, 157, 138, 89, 197, 58, 170, 317, 365, 259, 35, 381, 325, 153, 341, 124, 63, 313, 37, 249, 322, 168, 299, 345, 359, 112, 48, 165, 179, 284, 376, 51, 309, 163, 3, 262, 100, 64, 183, 119, 260, 106, 71, 275, 330, 96, 370, 173, 180, 27, 280, 171, 182, 121, 298, 115, 93, 19, 213, 123, 358, 200, 0, 337, 31, 167, 29, 160, 300, 104, 80, 294, 2, 371, 10, 349, 47, 236, 70, 266, 207, 304, 87, 308, 268, 130, 225, 26, 323, 210, 316, 292, 28, 352, 144, 159, 269, 373, 297, 215, 99, 148, 40, 326, 78, 372, 81, 41, 235, 18, 136, 364, 272, 324, 23, 145, 195, 244, 126, 1, 263, 251, 223, 6, 117, 34, 30, 65, 303, 50, 156, 312, 5, 46, 118, 250, 59, 333, 14, 84, 205, 229, 44, 109, 281, 162, 375, 32, 75, 273, 217, 267, 283, 120, 66, 73, 52, 147, 211, 175, 336, 154, 54, 68, 158, 256, 214, 378, 88, 176, 151, 60, 143, 17, 234, 61, 141, 245, 186, 240, 36, 133, 83, 203, 276, 380, 13, 218, 230, 271, 282, 343, 289, 295, 258, 226, 178, 101, 62, 296, 383, 247, 356, 361, 74, 219, 169, 122, 368, 174, 38, 161, 140, 208, 264, 353, 366, 193, 33, 351, 261, 350, 192, 328, 367, 257, 291, 152, 114, 7, 198, 237, 277, 125, 369, 362, 85, 21, 43, 293, 188, 146, 347, 232, 255, 91, 172, 76, 354, 90, 142, 311, 97, 302, 24, 321, 202, 224, 42, 22, 199, 86, 243, 332, 16, 290, 8, 164, 382, 204, 209, 39, 166, 113, 128, 110, 190, 103, 25, 95, 108, 116, 307, 149, 20, 206, 111, 254, 82, 221, 335, 155, 67, 319, 320, 53, 242, 327, 355, 94, 184, 49, 338, 339, 98, 55, 231, 107, 150, 201, 69, 72, 196, 377, 239, 77, 228, 127, 45, 279, 137, 318, 344] + 17: [119, 188, 46, 374, 142, 275, 79, 146, 104, 243, 207, 56, 91, 24, 272, 356, 98, 97, 189, 284, 156, 116, 363, 94, 81, 310, 319, 20, 15, 71, 259, 171, 48, 222, 33, 328, 145, 58, 230, 186, 276, 209, 247, 158, 40, 360, 359, 11, 292, 301, 256, 105, 213, 53, 216, 200, 114, 187, 313, 172, 265, 218, 199, 255, 69, 18, 221, 239, 67, 164, 149, 327, 381, 252, 353, 132, 268, 17, 85, 30, 182, 306, 295, 264, 122, 165, 152, 224, 111, 235, 280, 312, 203, 166, 223, 304, 220, 236, 89, 136, 294, 44, 117, 361, 143, 138, 178, 118, 366, 194, 107, 167, 128, 22, 113, 19, 240, 278, 208, 131, 376, 12, 348, 23, 279, 135, 286, 38, 125, 238, 73, 206, 297, 248, 174, 289, 370, 317, 316, 78, 341, 63, 83, 127, 133, 244, 1, 334, 9, 90, 274, 55, 109, 288, 139, 228, 245, 144, 300, 233, 21, 241, 151, 309, 323, 150, 141, 162, 346, 283, 34, 74, 153, 217, 333, 242, 345, 198, 175, 159, 7, 371, 329, 102, 263, 43, 342, 50, 28, 57, 227, 358, 261, 337, 357, 100, 307, 80, 197, 76, 254, 193, 296, 380, 173, 378, 190, 336, 308, 115, 163, 258, 303, 3, 96, 140, 8, 367, 364, 231, 0, 5, 59, 101, 52, 362, 318, 185, 204, 232, 282, 234, 124, 298, 343, 375, 61, 36, 37, 45, 176, 382, 285, 352, 344, 126, 372, 16, 302, 66, 10, 351, 87, 39, 92, 331, 321, 330, 281, 14, 51, 84, 325, 311, 237, 88, 270, 72, 195, 160, 70, 147, 184, 161, 202, 349, 183, 291, 299, 215, 180, 68, 210, 169, 251, 120, 368, 322, 266, 212, 108, 335, 324, 177, 110, 157, 75, 214, 262, 99, 219, 2, 42, 314, 27, 305, 196, 315, 65, 129, 290, 26, 179, 347, 77, 62, 103, 250, 82, 340, 60, 93, 6, 168, 130, 260, 326, 293, 355, 225, 49, 271, 148, 191, 287, 154, 377, 134, 112, 226, 47, 253, 365, 273, 246, 267, 369, 155, 13, 338, 4, 95, 121, 137, 229, 64, 86, 269, 350, 332, 181, 29, 211, 32, 54, 249, 170, 339, 25, 373, 277, 257, 383, 35, 320, 192, 41, 123, 379, 354, 205, 201, 31, 106] + 18: [271, 43, 46, 30, 29, 375, 380, 346, 347, 142, 174, 328, 339, 171, 234, 338, 334, 203, 355, 195, 155, 210, 231, 168, 212, 366, 316, 257, 245, 213, 291, 242, 320, 131, 341, 10, 359, 280, 238, 67, 343, 286, 99, 158, 337, 19, 26, 23, 248, 326, 173, 183, 175, 270, 156, 353, 159, 76, 299, 70, 285, 145, 133, 246, 0, 367, 1, 374, 143, 304, 2, 83, 91, 186, 219, 134, 268, 97, 151, 227, 352, 224, 92, 44, 95, 36, 150, 20, 45, 49, 59, 74, 75, 94, 101, 127, 260, 192, 35, 117, 118, 207, 228, 119, 266, 11, 342, 205, 217, 208, 356, 294, 122, 237, 373, 163, 124, 193, 96, 82, 324, 53, 236, 108, 33, 18, 22, 56, 166, 325, 12, 66, 78, 152, 382, 252, 349, 7, 62, 269, 28, 112, 39, 58, 225, 114, 170, 261, 37, 85, 305, 379, 106, 167, 214, 162, 48, 128, 289, 81, 313, 15, 9, 357, 301, 47, 182, 218, 13, 292, 120, 196, 276, 141, 265, 194, 298, 4, 364, 303, 232, 104, 350, 107, 222, 132, 161, 165, 187, 197, 220, 230, 139, 185, 169, 251, 34, 65, 68, 31, 284, 146, 189, 164, 16, 361, 77, 61, 149, 288, 300, 89, 275, 369, 297, 102, 282, 335, 41, 235, 264, 40, 93, 206, 370, 272, 333, 72, 123, 279, 60, 188, 360, 358, 345, 216, 42, 202, 14, 32, 79, 181, 250, 223, 51, 24, 121, 383, 54, 240, 157, 116, 372, 129, 377, 178, 177, 312, 281, 241, 64, 253, 233, 90, 259, 371, 221, 307, 52, 184, 21, 317, 179, 153, 130, 290, 332, 209, 3, 296, 254, 247, 258, 274, 293, 311, 314, 322, 138, 98, 71, 69, 113, 144, 376, 330, 331, 50, 255, 368, 211, 363, 351, 176, 365, 63, 229, 6, 103, 136, 80, 215, 110, 256, 148, 190, 84, 263, 306, 105, 329, 244, 262, 8, 199, 308, 38, 87, 86, 57, 267, 160, 319, 154, 201, 310, 243, 17, 239, 115, 111, 302, 283, 27, 135, 5, 278, 315, 200, 191, 147, 25, 172, 126, 277, 381, 109, 318, 100, 273, 348, 295, 140, 137, 204, 125, 198, 321, 88, 180, 226, 73, 378, 249, 55, 309, 287, 323, 327, 336, 340, 344, 354, 362] + 19: [24, 328, 207, 134, 323, 158, 152, 58, 141, 279, 339, 161, 354, 183, 243, 3, 165, 61, 208, 84, 302, 333, 147, 94, 342, 296, 360, 216, 217, 314, 352, 255, 44, 191, 239, 192, 202, 125, 230, 280, 331, 337, 41, 210, 182, 306, 370, 143, 317, 258, 371, 10, 212, 40, 330, 335, 5, 356, 324, 99, 81, 310, 76, 140, 151, 267, 11, 269, 341, 18, 234, 344, 123, 67, 254, 78, 168, 169, 128, 277, 170, 39, 276, 131, 23, 25, 32, 34, 46, 62, 72, 93, 98, 100, 106, 109, 190, 334, 363, 90, 188, 307, 115, 120, 1, 166, 287, 312, 251, 156, 297, 283, 96, 80, 377, 180, 240, 157, 359, 366, 260, 2, 73, 235, 320, 113, 13, 19, 92, 31, 144, 15, 219, 281, 378, 367, 358, 6, 55, 353, 146, 286, 221, 51, 107, 95, 111, 175, 112, 351, 110, 247, 130, 233, 293, 63, 364, 382, 127, 199, 285, 86, 28, 82, 209, 88, 308, 305, 381, 223, 278, 186, 298, 164, 350, 119, 313, 379, 129, 340, 236, 174, 347, 172, 118, 126, 133, 136, 137, 155, 163, 201, 187, 222, 97, 52, 244, 206, 77, 288, 91, 265, 203, 193, 132, 29, 215, 338, 315, 301, 8, 275, 300, 101, 38, 117, 374, 227, 167, 153, 321, 79, 272, 43, 176, 349, 159, 30, 249, 361, 290, 177, 53, 74, 295, 89, 195, 102, 200, 259, 14, 59, 65, 336, 16, 304, 228, 181, 224, 54, 27, 262, 60, 36, 26, 237, 69, 64, 45, 37, 85, 145, 252, 196, 0, 232, 21, 375, 104, 248, 362, 17, 213, 253, 343, 380, 12, 49, 250, 50, 75, 198, 205, 229, 245, 266, 274, 316, 256, 66, 7, 179, 154, 291, 211, 121, 33, 114, 122, 108, 9, 373, 318, 171, 71, 264, 270, 135, 47, 20, 284, 218, 116, 68, 138, 238, 139, 273, 303, 57, 83, 56, 184, 294, 173, 325, 311, 178, 242, 271, 149, 292, 231, 383, 241, 148, 160, 185, 70, 197, 22, 372, 194, 35, 204, 299, 282, 332, 345, 257, 368, 246, 42, 289, 189, 87, 124, 376, 142, 348, 162, 220, 329, 225, 346, 322, 261, 369, 268, 48, 226, 309, 150, 103, 4, 263, 105, 214, 319, 326, 327, 355, 357, 365] + 20: [37, 144, 369, 66, 223, 35, 252, 113, 291, 307, 339, 194, 177, 357, 374, 125, 216, 221, 289, 6, 256, 320, 188, 233, 33, 354, 90, 3, 323, 136, 346, 26, 264, 270, 110, 309, 227, 88, 50, 337, 164, 81, 312, 59, 31, 75, 133, 218, 46, 56, 141, 306, 253, 204, 48, 226, 298, 70, 308, 115, 340, 126, 217, 348, 73, 163, 238, 274, 5, 12, 16, 17, 23, 24, 28, 34, 38, 44, 47, 51, 52, 60, 62, 63, 67, 68, 72, 76, 84, 85, 89, 102, 103, 104, 107, 108, 278, 121, 311, 376, 248, 138, 318, 159, 41, 321, 145, 335, 236, 317, 4, 372, 245, 199, 64, 370, 124, 362, 375, 377, 371, 101, 213, 279, 228, 30, 45, 273, 119, 220, 240, 78, 171, 146, 334, 336, 180, 36, 282, 363, 210, 201, 219, 186, 355, 352, 65, 244, 80, 359, 0, 179, 15, 152, 61, 205, 69, 168, 301, 1, 79, 189, 239, 328, 109, 117, 118, 127, 129, 131, 134, 135, 139, 142, 147, 148, 149, 150, 151, 155, 156, 157, 167, 169, 170, 175, 181, 183, 190, 191, 192, 196, 116, 111, 122, 160, 324, 195, 325, 182, 187, 229, 351, 174, 58, 341, 292, 232, 99, 123, 158, 77, 259, 178, 209, 293, 284, 207, 246, 162, 93, 8, 140, 345, 14, 235, 184, 91, 13, 338, 267, 39, 130, 92, 258, 40, 185, 120, 7, 254, 18, 42, 272, 202, 54, 350, 222, 208, 55, 211, 74, 281, 83, 197, 343, 27, 96, 212, 251, 361, 198, 206, 214, 215, 230, 231, 234, 237, 241, 242, 243, 247, 249, 255, 257, 261, 262, 263, 266, 269, 271, 276, 277, 280, 283, 285, 286, 288, 381, 105, 161, 10, 82, 106, 2, 112, 97, 71, 290, 287, 353, 43, 95, 315, 193, 57, 25, 132, 380, 153, 342, 322, 364, 172, 378, 11, 86, 347, 200, 295, 49, 87, 165, 100, 302, 98, 114, 379, 32, 250, 19, 22, 319, 313, 368, 203, 173, 53, 305, 265, 9, 21, 154, 275, 268, 94, 128, 310, 143, 29, 176, 20, 166, 225, 365, 137, 224, 260, 366, 294, 296, 297, 299, 300, 303, 304, 314, 316, 326, 327, 329, 330, 331, 332, 333, 344, 349, 356, 358, 360, 367, 373, 382, 383] + 21: [371, 361, 250, 45, 262, 355, 245, 237, 141, 94, 29, 155, 365, 187, 25, 359, 367, 308, 162, 271, 159, 337, 351, 128, 287, 326, 132, 194, 43, 133, 22, 14, 98, 26, 183, 15, 383, 148, 354, 23, 336, 139, 358, 286, 85, 210, 9, 280, 44, 40, 324, 188, 203, 382, 161, 290, 191, 299, 156, 64, 229, 207, 363, 259, 289, 345, 123, 234, 166, 332, 35, 163, 310, 131, 243, 369, 212, 236, 223, 108, 157, 3, 7, 10, 11, 17, 32, 36, 42, 56, 58, 59, 61, 70, 93, 104, 158, 256, 270, 232, 112, 379, 277, 297, 66, 304, 213, 149, 364, 349, 55, 205, 233, 225, 150, 247, 208, 178, 189, 267, 374, 257, 252, 242, 5, 171, 258, 318, 4, 196, 227, 34, 238, 74, 316, 261, 97, 38, 263, 86, 312, 105, 380, 170, 126, 52, 303, 186, 248, 47, 119, 174, 314, 147, 192, 222, 91, 53, 117, 77, 21, 333, 30, 48, 114, 323, 330, 373, 130, 296, 99, 101, 90, 344, 334, 285, 73, 62, 68, 228, 217, 107, 125, 136, 164, 167, 179, 181, 184, 198, 215, 216, 152, 121, 214, 20, 200, 124, 230, 87, 175, 279, 218, 65, 135, 88, 240, 92, 377, 362, 103, 100, 82, 8, 295, 115, 276, 60, 211, 24, 113, 63, 346, 328, 173, 195, 190, 360, 226, 321, 255, 291, 224, 375, 102, 320, 120, 300, 209, 160, 28, 185, 84, 153, 67, 96, 1, 370, 313, 54, 302, 146, 50, 244, 110, 273, 357, 356, 76, 78, 41, 331, 39, 239, 6, 180, 353, 116, 151, 137, 197, 288, 251, 246, 127, 134, 37, 122, 294, 219, 264, 265, 266, 269, 272, 278, 282, 292, 281, 51, 182, 254, 80, 2, 199, 284, 352, 172, 221, 220, 71, 378, 376, 144, 19, 129, 293, 89, 348, 143, 12, 46, 33, 13, 325, 169, 16, 341, 366, 275, 18, 368, 75, 274, 342, 301, 83, 206, 27, 204, 372, 0, 140, 118, 168, 165, 202, 176, 260, 106, 340, 347, 142, 249, 298, 72, 109, 111, 338, 307, 57, 235, 69, 95, 81, 79, 283, 381, 317, 241, 309, 145, 177, 253, 31, 193, 231, 306, 268, 343, 154, 201, 49, 138, 329, 305, 311, 315, 319, 322, 327, 335, 339, 350] + 22: [73, 118, 329, 164, 226, 376, 51, 197, 15, 126, 170, 132, 251, 180, 305, 21, 330, 122, 179, 314, 205, 371, 184, 56, 59, 326, 352, 189, 68, 264, 255, 268, 347, 362, 69, 78, 292, 46, 19, 99, 322, 171, 232, 152, 138, 8, 85, 319, 369, 28, 340, 327, 277, 219, 18, 90, 137, 97, 168, 158, 301, 378, 26, 203, 0, 10, 140, 295, 1, 7, 12, 14, 30, 34, 35, 39, 40, 41, 43, 45, 47, 48, 49, 52, 55, 77, 81, 84, 86, 91, 93, 95, 96, 100, 102, 103, 209, 328, 224, 148, 153, 240, 216, 178, 80, 61, 139, 339, 299, 79, 215, 318, 221, 201, 252, 306, 214, 361, 50, 238, 151, 281, 293, 289, 58, 334, 37, 200, 66, 76, 38, 191, 294, 156, 227, 309, 272, 94, 92, 33, 188, 70, 22, 173, 6, 89, 364, 3, 218, 320, 379, 242, 32, 98, 287, 75, 36, 88, 206, 303, 2, 67, 235, 62, 150, 300, 104, 105, 107, 114, 119, 120, 121, 124, 128, 129, 131, 135, 136, 142, 143, 145, 146, 154, 157, 159, 161, 162, 165, 166, 167, 176, 343, 141, 357, 125, 348, 63, 24, 304, 111, 345, 110, 333, 198, 274, 351, 311, 54, 278, 244, 183, 42, 367, 193, 307, 174, 134, 72, 82, 123, 195, 366, 20, 273, 279, 11, 324, 363, 163, 5, 60, 115, 285, 283, 108, 269, 130, 365, 172, 263, 321, 25, 17, 31, 116, 249, 296, 53, 302, 335, 286, 64, 101, 213, 332, 13, 83, 239, 65, 233, 358, 181, 182, 186, 187, 190, 192, 194, 199, 202, 208, 217, 222, 223, 230, 234, 236, 237, 241, 243, 245, 247, 248, 250, 253, 256, 257, 317, 207, 260, 144, 147, 169, 204, 337, 177, 288, 74, 113, 261, 355, 381, 377, 175, 275, 331, 349, 246, 336, 211, 155, 27, 338, 228, 341, 312, 225, 220, 276, 133, 29, 229, 258, 109, 316, 254, 160, 87, 259, 106, 382, 360, 374, 23, 149, 9, 212, 4, 44, 298, 210, 57, 185, 380, 284, 383, 196, 117, 112, 231, 356, 16, 127, 325, 71, 270, 373, 262, 265, 266, 267, 271, 280, 282, 290, 291, 297, 308, 310, 313, 315, 323, 342, 344, 346, 350, 353, 354, 359, 368, 370, 372, 375] + 23: [172, 232, 374, 82, 86, 49, 170, 203, 123, 4, 299, 254, 279, 370, 100, 230, 292, 261, 1, 36, 132, 371, 336, 185, 217, 201, 219, 270, 125, 210, 349, 308, 361, 21, 282, 164, 341, 335, 0, 84, 296, 277, 30, 216, 354, 24, 151, 77, 97, 221, 145, 225, 91, 351, 15, 87, 169, 8, 206, 350, 284, 44, 41, 199, 149, 33, 209, 139, 278, 207, 96, 177, 37, 179, 150, 259, 188, 141, 345, 121, 120, 250, 303, 236, 75, 242, 13, 14, 29, 31, 64, 88, 110, 113, 157, 168, 26, 327, 5, 146, 274, 63, 339, 133, 295, 156, 340, 193, 180, 222, 78, 54, 329, 342, 297, 117, 38, 196, 346, 98, 50, 355, 147, 249, 247, 42, 127, 119, 122, 262, 32, 67, 239, 115, 108, 138, 287, 256, 109, 165, 101, 19, 154, 17, 306, 47, 103, 106, 45, 362, 365, 360, 233, 328, 255, 289, 23, 85, 271, 215, 40, 300, 227, 375, 280, 118, 128, 28, 382, 46, 311, 364, 160, 27, 211, 356, 372, 135, 61, 3, 316, 171, 114, 83, 89, 363, 198, 202, 214, 235, 265, 276, 167, 80, 358, 220, 111, 337, 197, 94, 253, 70, 130, 229, 309, 237, 184, 204, 52, 264, 307, 218, 74, 379, 373, 48, 53, 290, 324, 315, 331, 107, 263, 79, 353, 10, 73, 240, 245, 93, 269, 321, 228, 182, 7, 51, 258, 344, 191, 190, 367, 99, 159, 326, 174, 241, 55, 140, 267, 377, 153, 334, 20, 238, 305, 369, 9, 347, 266, 12, 137, 275, 381, 183, 60, 333, 260, 43, 318, 298, 205, 310, 293, 243, 294, 56, 57, 223, 192, 383, 212, 272, 134, 268, 288, 291, 301, 319, 352, 131, 314, 187, 176, 148, 213, 173, 72, 378, 102, 359, 285, 158, 58, 2, 376, 92, 155, 35, 273, 143, 313, 162, 332, 11, 322, 208, 6, 152, 195, 22, 304, 81, 163, 338, 317, 312, 161, 244, 323, 90, 124, 325, 257, 105, 104, 348, 248, 76, 226, 380, 283, 178, 234, 25, 252, 200, 66, 166, 62, 95, 320, 302, 129, 186, 116, 112, 343, 175, 142, 68, 224, 194, 246, 126, 59, 71, 18, 16, 144, 231, 65, 281, 181, 34, 357, 69, 39, 251, 136, 189, 286, 330, 366, 368] + 24: [70, 213, 122, 220, 237, 1, 226, 211, 202, 316, 210, 371, 257, 12, 182, 178, 381, 93, 8, 6, 41, 38, 382, 50, 258, 114, 181, 37, 88, 204, 262, 110, 203, 18, 357, 188, 345, 31, 306, 61, 366, 168, 347, 358, 218, 349, 155, 215, 108, 326, 145, 275, 286, 183, 310, 130, 185, 373, 106, 243, 90, 40, 47, 184, 285, 153, 120, 105, 305, 162, 298, 100, 376, 55, 56, 271, 160, 225, 10, 23, 32, 34, 36, 45, 57, 69, 74, 75, 76, 83, 98, 113, 115, 125, 129, 132, 246, 343, 301, 131, 290, 375, 283, 244, 344, 325, 137, 97, 350, 139, 201, 200, 287, 330, 319, 144, 263, 63, 269, 147, 84, 308, 4, 297, 333, 27, 190, 221, 189, 248, 229, 295, 96, 20, 261, 156, 302, 255, 216, 87, 157, 360, 224, 163, 146, 327, 117, 377, 152, 317, 328, 140, 66, 242, 186, 284, 126, 208, 133, 372, 362, 119, 197, 165, 228, 127, 300, 16, 25, 214, 85, 179, 369, 177, 81, 167, 60, 359, 176, 227, 143, 149, 161, 166, 169, 170, 173, 194, 196, 217, 240, 241, 0, 46, 5, 109, 195, 266, 118, 121, 28, 82, 172, 35, 142, 104, 318, 135, 299, 231, 256, 150, 95, 9, 15, 264, 289, 116, 253, 128, 73, 324, 151, 159, 293, 26, 39, 273, 282, 14, 44, 79, 268, 277, 103, 361, 124, 192, 365, 58, 307, 171, 315, 72, 320, 348, 338, 91, 64, 280, 30, 233, 279, 89, 54, 3, 33, 335, 234, 340, 199, 123, 193, 21, 134, 223, 48, 232, 368, 29, 77, 219, 180, 68, 2, 99, 187, 239, 249, 250, 251, 267, 270, 278, 281, 291, 303, 312, 92, 274, 154, 311, 265, 259, 86, 337, 175, 354, 43, 370, 136, 7, 342, 212, 112, 230, 323, 341, 355, 374, 51, 336, 49, 352, 62, 276, 111, 78, 254, 80, 53, 252, 321, 294, 138, 52, 260, 42, 191, 65, 11, 22, 59, 332, 102, 334, 13, 207, 71, 288, 205, 380, 236, 209, 322, 206, 245, 164, 346, 238, 67, 148, 235, 247, 363, 339, 313, 329, 19, 101, 174, 304, 17, 272, 158, 292, 94, 296, 222, 24, 141, 107, 198, 309, 314, 331, 351, 353, 356, 364, 367, 378, 379, 383] + 25: [379, 328, 80, 307, 327, 351, 89, 131, 359, 37, 222, 188, 382, 238, 365, 51, 340, 299, 194, 204, 196, 77, 68, 82, 192, 224, 0, 244, 40, 272, 24, 242, 305, 54, 201, 363, 228, 260, 368, 78, 35, 259, 383, 308, 128, 282, 312, 170, 109, 302, 30, 300, 235, 288, 23, 1, 292, 345, 94, 186, 112, 61, 184, 86, 58, 135, 198, 321, 344, 182, 189, 171, 338, 208, 213, 169, 177, 255, 104, 207, 263, 356, 3, 43, 87, 91, 95, 99, 119, 123, 174, 219, 286, 326, 329, 358, 269, 334, 167, 231, 140, 149, 215, 101, 366, 250, 309, 217, 120, 29, 218, 310, 16, 252, 11, 180, 111, 316, 336, 343, 296, 33, 136, 39, 57, 15, 8, 113, 153, 117, 348, 195, 81, 59, 306, 70, 214, 65, 144, 133, 63, 337, 197, 53, 145, 246, 41, 60, 294, 175, 258, 283, 187, 240, 339, 173, 369, 129, 349, 251, 254, 75, 88, 34, 139, 199, 205, 239, 352, 121, 55, 372, 209, 126, 122, 22, 277, 364, 243, 206, 322, 342, 267, 21, 355, 67, 13, 178, 164, 12, 264, 362, 232, 315, 193, 168, 31, 317, 9, 319, 287, 253, 64, 314, 211, 375, 25, 2, 124, 32, 146, 98, 320, 143, 73, 229, 52, 298, 261, 381, 20, 200, 361, 230, 293, 79, 132, 265, 191, 156, 225, 247, 270, 237, 125, 172, 203, 62, 74, 324, 6, 202, 116, 102, 69, 221, 281, 274, 311, 159, 318, 49, 353, 367, 138, 148, 373, 165, 83, 137, 157, 341, 210, 18, 234, 158, 71, 227, 85, 284, 50, 14, 19, 163, 92, 26, 150, 325, 160, 155, 303, 127, 257, 220, 118, 374, 152, 301, 354, 107, 72, 56, 278, 271, 332, 162, 27, 5, 291, 161, 76, 114, 280, 48, 266, 256, 262, 333, 313, 377, 115, 371, 100, 304, 295, 285, 268, 347, 46, 190, 44, 183, 241, 42, 273, 17, 335, 38, 10, 47, 103, 7, 84, 212, 97, 66, 28, 279, 216, 110, 4, 297, 108, 330, 276, 179, 249, 185, 346, 130, 350, 360, 380, 376, 142, 357, 105, 290, 248, 96, 275, 154, 370, 331, 233, 236, 378, 93, 166, 36, 289, 181, 323, 45, 90, 106, 147, 176, 223, 151, 134, 245, 226, 141] + 26: [217, 249, 113, 92, 128, 48, 328, 195, 108, 237, 293, 93, 272, 371, 367, 67, 216, 277, 188, 224, 318, 135, 329, 30, 2, 221, 126, 74, 232, 148, 44, 11, 77, 266, 94, 76, 223, 127, 134, 378, 159, 152, 192, 20, 308, 9, 370, 103, 335, 117, 331, 353, 212, 171, 349, 375, 352, 376, 301, 66, 88, 101, 325, 351, 98, 157, 64, 57, 305, 10, 43, 187, 313, 1, 3, 4, 14, 19, 22, 23, 25, 28, 29, 35, 47, 52, 54, 56, 58, 60, 63, 68, 73, 81, 84, 85, 90, 281, 27, 142, 337, 262, 89, 254, 278, 300, 294, 215, 15, 204, 137, 310, 62, 359, 183, 256, 342, 279, 174, 269, 55, 364, 110, 239, 184, 34, 231, 124, 156, 186, 220, 315, 24, 69, 245, 107, 116, 176, 327, 280, 5, 317, 208, 163, 6, 291, 314, 296, 298, 198, 160, 13, 97, 302, 100, 206, 109, 123, 46, 211, 168, 12, 377, 191, 111, 36, 326, 86, 225, 324, 91, 96, 115, 119, 121, 122, 132, 139, 141, 143, 145, 147, 150, 153, 169, 180, 185, 193, 194, 197, 199, 203, 380, 304, 227, 271, 120, 173, 360, 125, 21, 290, 170, 102, 251, 140, 138, 83, 182, 78, 165, 179, 282, 265, 344, 80, 236, 196, 59, 202, 334, 356, 230, 238, 382, 32, 258, 343, 241, 222, 275, 41, 233, 114, 363, 65, 190, 8, 154, 229, 289, 7, 161, 40, 244, 16, 37, 316, 144, 50, 347, 205, 149, 164, 366, 248, 285, 71, 49, 379, 247, 75, 332, 105, 255, 345, 207, 209, 210, 213, 218, 219, 228, 234, 235, 240, 242, 243, 246, 250, 252, 257, 259, 261, 264, 267, 268, 270, 136, 181, 338, 276, 214, 118, 146, 200, 112, 172, 178, 53, 38, 31, 70, 106, 341, 151, 131, 39, 61, 95, 323, 339, 321, 226, 263, 167, 166, 306, 355, 357, 162, 177, 18, 311, 79, 33, 129, 45, 130, 383, 336, 158, 320, 51, 87, 286, 82, 292, 312, 361, 17, 374, 0, 307, 303, 155, 340, 201, 72, 26, 354, 104, 99, 369, 175, 365, 253, 260, 189, 42, 133, 284, 346, 273, 274, 283, 287, 288, 295, 297, 299, 309, 319, 322, 330, 333, 348, 350, 358, 362, 368, 372, 373, 381] + 27: [103, 325, 10, 228, 50, 305, 133, 304, 371, 140, 28, 151, 171, 269, 78, 29, 178, 111, 131, 374, 37, 27, 324, 296, 49, 323, 105, 244, 109, 58, 132, 121, 254, 95, 266, 288, 52, 114, 321, 306, 327, 64, 316, 261, 226, 62, 232, 134, 60, 76, 284, 335, 146, 202, 170, 301, 139, 1, 136, 345, 61, 164, 283, 219, 44, 147, 200, 355, 231, 172, 287, 166, 130, 91, 41, 275, 319, 17, 154, 315, 63, 148, 243, 169, 367, 8, 51, 53, 79, 96, 137, 182, 206, 212, 255, 257, 32, 360, 98, 347, 89, 113, 141, 42, 25, 168, 349, 127, 252, 197, 73, 370, 379, 224, 277, 356, 116, 150, 71, 190, 188, 125, 120, 351, 250, 292, 218, 6, 217, 242, 106, 238, 173, 308, 294, 193, 162, 70, 334, 75, 68, 369, 149, 365, 93, 233, 31, 357, 124, 350, 207, 180, 189, 330, 67, 38, 11, 87, 208, 271, 279, 340, 14, 184, 352, 235, 122, 145, 20, 297, 331, 358, 186, 227, 363, 326, 138, 346, 36, 156, 220, 336, 101, 161, 256, 286, 203, 39, 4, 163, 270, 302, 225, 214, 12, 23, 260, 251, 16, 329, 85, 337, 118, 21, 303, 128, 353, 104, 198, 55, 343, 88, 258, 354, 48, 159, 259, 267, 187, 90, 339, 348, 94, 83, 376, 13, 181, 320, 280, 115, 5, 237, 86, 341, 272, 3, 185, 82, 199, 264, 80, 248, 84, 229, 281, 215, 377, 56, 99, 33, 9, 282, 239, 45, 97, 195, 313, 192, 26, 191, 69, 15, 299, 194, 167, 276, 155, 373, 278, 312, 24, 157, 205, 201, 307, 152, 117, 74, 247, 160, 285, 92, 240, 129, 300, 236, 332, 338, 333, 81, 177, 66, 222, 175, 265, 234, 213, 72, 230, 54, 7, 381, 0, 273, 143, 18, 317, 328, 362, 249, 263, 47, 34, 245, 183, 110, 318, 383, 344, 65, 246, 30, 204, 368, 210, 102, 382, 380, 291, 298, 295, 290, 211, 112, 274, 142, 135, 179, 309, 262, 241, 144, 35, 77, 126, 359, 366, 123, 158, 174, 375, 293, 289, 176, 22, 196, 108, 119, 216, 107, 59, 165, 314, 253, 153, 223, 268, 322, 221, 2, 364, 19, 46, 57, 100, 40, 361, 310, 209, 311, 43, 342, 372, 378] + 28: [310, 312, 201, 285, 179, 67, 3, 21, 148, 22, 112, 324, 243, 133, 224, 51, 252, 210, 25, 237, 7, 227, 321, 327, 144, 366, 221, 375, 1, 320, 268, 218, 158, 378, 70, 368, 311, 162, 130, 187, 104, 297, 209, 207, 223, 214, 77, 247, 98, 337, 125, 260, 177, 193, 184, 316, 334, 269, 63, 15, 374, 296, 56, 65, 283, 295, 82, 190, 246, 9, 258, 188, 46, 18, 315, 10, 85, 372, 139, 354, 145, 254, 89, 73, 336, 34, 123, 27, 270, 54, 212, 279, 96, 147, 160, 257, 317, 121, 197, 97, 176, 66, 289, 356, 100, 182, 16, 24, 170, 52, 369, 267, 370, 90, 241, 303, 166, 57, 341, 116, 53, 110, 32, 350, 314, 228, 5, 64, 44, 259, 349, 213, 80, 274, 363, 128, 230, 383, 308, 59, 171, 167, 181, 191, 273, 211, 276, 286, 37, 322, 272, 149, 300, 88, 131, 81, 345, 265, 359, 234, 192, 156, 309, 361, 76, 159, 189, 6, 151, 60, 39, 284, 351, 244, 103, 373, 12, 132, 118, 292, 94, 36, 115, 275, 173, 29, 256, 301, 290, 294, 298, 313, 253, 26, 0, 250, 307, 196, 169, 71, 376, 13, 165, 48, 205, 72, 172, 183, 262, 288, 157, 380, 20, 357, 107, 134, 305, 318, 175, 174, 352, 264, 362, 95, 153, 219, 346, 333, 238, 239, 137, 117, 233, 367, 280, 43, 17, 91, 99, 114, 225, 331, 120, 266, 249, 277, 271, 122, 152, 371, 140, 178, 358, 216, 281, 79, 329, 323, 339, 69, 245, 23, 33, 31, 106, 232, 119, 236, 291, 40, 55, 78, 126, 62, 231, 47, 141, 93, 186, 150, 365, 11, 146, 338, 348, 342, 343, 355, 255, 220, 235, 135, 328, 199, 163, 41, 302, 30, 222, 195, 108, 168, 278, 203, 344, 204, 326, 155, 50, 109, 226, 194, 92, 248, 105, 200, 263, 42, 242, 217, 61, 154, 306, 287, 206, 161, 240, 185, 340, 379, 330, 113, 129, 143, 4, 102, 14, 49, 229, 293, 208, 347, 198, 19, 35, 28, 124, 136, 332, 68, 38, 180, 58, 111, 202, 282, 299, 325, 84, 364, 382, 319, 74, 215, 87, 45, 251, 101, 8, 335, 142, 138, 353, 127, 2, 304, 86, 83, 164, 75, 261, 360, 377, 381] + 29: [197, 83, 277, 346, 140, 11, 132, 218, 116, 301, 180, 73, 253, 190, 214, 86, 19, 185, 349, 22, 62, 286, 113, 300, 318, 139, 175, 145, 3, 101, 340, 81, 353, 276, 2, 275, 187, 203, 287, 350, 146, 303, 94, 115, 198, 229, 5, 126, 144, 160, 103, 166, 290, 307, 117, 56, 359, 37, 322, 257, 309, 281, 51, 155, 252, 77, 68, 12, 194, 249, 192, 335, 15, 130, 321, 246, 107, 31, 82, 376, 6, 8, 10, 13, 29, 47, 69, 71, 79, 91, 96, 121, 138, 164, 165, 178, 127, 357, 314, 283, 255, 232, 4, 269, 110, 245, 215, 207, 59, 244, 195, 339, 18, 172, 345, 120, 99, 206, 330, 50, 55, 90, 250, 34, 235, 278, 291, 271, 361, 295, 325, 317, 188, 125, 323, 57, 142, 65, 143, 137, 64, 292, 167, 254, 52, 263, 299, 30, 92, 184, 289, 39, 227, 179, 355, 199, 338, 61, 364, 363, 16, 26, 98, 348, 123, 157, 268, 226, 134, 328, 191, 216, 381, 141, 372, 284, 35, 0, 306, 326, 17, 28, 239, 334, 135, 181, 95, 20, 66, 201, 212, 224, 74, 243, 311, 294, 85, 365, 280, 270, 312, 362, 375, 341, 148, 53, 259, 14, 324, 119, 360, 293, 228, 231, 327, 344, 36, 87, 333, 25, 354, 374, 196, 186, 208, 104, 320, 304, 370, 251, 124, 105, 273, 236, 129, 262, 156, 72, 7, 221, 319, 154, 274, 111, 264, 161, 308, 233, 222, 75, 67, 225, 209, 237, 298, 168, 131, 21, 63, 379, 23, 242, 234, 1, 373, 42, 122, 70, 329, 315, 93, 9, 106, 238, 282, 136, 24, 152, 337, 49, 205, 27, 153, 247, 305, 240, 260, 261, 174, 351, 266, 97, 128, 88, 40, 58, 248, 297, 352, 118, 382, 162, 149, 33, 44, 367, 48, 366, 78, 43, 151, 210, 223, 60, 369, 183, 310, 267, 219, 313, 279, 258, 80, 46, 220, 347, 114, 177, 368, 163, 343, 54, 316, 200, 32, 133, 112, 272, 159, 332, 380, 296, 171, 76, 45, 256, 100, 182, 204, 173, 383, 213, 241, 230, 41, 147, 84, 265, 193, 211, 109, 38, 189, 302, 358, 170, 108, 158, 217, 102, 336, 342, 89, 150, 202, 356, 331, 371, 176, 169, 378, 285, 288, 377] + 30: [239, 62, 144, 166, 28, 213, 362, 230, 298, 337, 60, 24, 272, 253, 198, 48, 246, 358, 292, 378, 303, 116, 163, 260, 193, 184, 289, 12, 273, 361, 196, 153, 212, 27, 147, 327, 96, 86, 352, 235, 300, 162, 141, 115, 247, 256, 41, 122, 309, 324, 133, 328, 43, 156, 5, 112, 132, 91, 173, 329, 72, 107, 299, 209, 342, 179, 314, 307, 367, 8, 148, 252, 19, 368, 231, 93, 42, 366, 75, 16, 295, 178, 114, 192, 313, 98, 297, 30, 21, 31, 32, 34, 36, 69, 79, 81, 37, 296, 233, 111, 6, 195, 248, 265, 318, 109, 245, 249, 250, 223, 52, 187, 97, 68, 221, 288, 63, 293, 200, 308, 160, 151, 139, 92, 172, 263, 217, 359, 261, 7, 283, 341, 51, 110, 129, 183, 325, 312, 332, 274, 199, 291, 128, 113, 170, 150, 335, 174, 104, 13, 87, 316, 157, 370, 26, 67, 25, 319, 154, 108, 39, 267, 186, 365, 229, 372, 301, 131, 219, 18, 176, 340, 57, 136, 134, 380, 374, 9, 56, 117, 232, 47, 149, 4, 169, 82, 88, 100, 106, 119, 127, 145, 140, 137, 65, 50, 53, 262, 121, 78, 11, 258, 38, 90, 152, 77, 14, 281, 89, 171, 224, 346, 158, 242, 351, 349, 66, 211, 142, 29, 210, 1, 167, 125, 376, 241, 205, 138, 99, 234, 320, 348, 161, 3, 220, 20, 143, 373, 271, 302, 315, 306, 379, 286, 343, 282, 227, 257, 226, 40, 215, 331, 240, 55, 103, 338, 311, 95, 275, 76, 181, 350, 165, 182, 243, 326, 251, 177, 330, 323, 126, 268, 83, 194, 276, 382, 218, 334, 146, 322, 228, 180, 185, 189, 190, 201, 237, 259, 208, 222, 277, 254, 381, 206, 2, 46, 317, 35, 164, 344, 202, 225, 357, 135, 383, 64, 10, 266, 23, 321, 203, 284, 197, 105, 244, 294, 71, 44, 285, 371, 280, 124, 155, 102, 214, 94, 369, 353, 333, 130, 84, 347, 33, 279, 175, 15, 287, 336, 360, 58, 120, 74, 45, 339, 304, 0, 290, 59, 236, 70, 270, 364, 255, 85, 188, 207, 80, 17, 159, 355, 216, 356, 264, 123, 49, 118, 375, 61, 238, 204, 73, 101, 168, 305, 54, 191, 22, 310, 269, 278, 345, 354, 363, 377] + 31: [288, 361, 123, 160, 82, 339, 176, 88, 240, 284, 146, 169, 60, 86, 70, 378, 61, 375, 45, 335, 277, 296, 336, 227, 290, 287, 177, 190, 2, 40, 195, 96, 78, 62, 275, 244, 34, 122, 267, 143, 357, 93, 219, 111, 105, 173, 8, 52, 249, 364, 368, 334, 319, 158, 145, 19, 344, 234, 209, 117, 136, 194, 382, 255, 273, 116, 247, 302, 36, 17, 212, 118, 216, 85, 80, 370, 217, 213, 300, 13, 35, 329, 120, 165, 73, 239, 127, 228, 24, 203, 95, 181, 347, 175, 207, 301, 248, 299, 253, 112, 153, 326, 124, 260, 383, 186, 252, 59, 317, 321, 183, 377, 269, 307, 359, 338, 87, 3, 178, 223, 131, 140, 272, 263, 57, 47, 79, 238, 292, 220, 200, 188, 44, 243, 320, 128, 332, 109, 167, 27, 29, 346, 144, 65, 107, 257, 171, 66, 137, 106, 254, 304, 15, 291, 193, 81, 282, 328, 362, 180, 351, 310, 148, 198, 179, 265, 280, 129, 215, 1, 199, 197, 259, 226, 168, 185, 113, 142, 68, 51, 298, 149, 246, 10, 318, 210, 352, 11, 343, 54, 162, 67, 159, 365, 360, 309, 125, 108, 39, 222, 75, 314, 354, 241, 102, 134, 191, 206, 214, 201, 58, 98, 261, 72, 139, 49, 110, 281, 84, 278, 293, 232, 224, 182, 196, 38, 379, 147, 174, 274, 312, 6, 4, 16, 286, 130, 77, 353, 56, 271, 12, 33, 92, 43, 18, 285, 31, 325, 211, 20, 250, 155, 297, 306, 303, 163, 91, 311, 337, 152, 99, 184, 374, 104, 69, 340, 161, 100, 356, 205, 225, 251, 294, 218, 341, 187, 381, 322, 90, 114, 372, 235, 135, 262, 172, 126, 229, 89, 115, 121, 237, 380, 138, 156, 376, 221, 264, 231, 23, 245, 133, 55, 25, 202, 270, 305, 26, 32, 316, 313, 349, 366, 0, 330, 170, 236, 164, 9, 355, 373, 103, 22, 324, 189, 345, 48, 276, 208, 21, 83, 348, 371, 157, 192, 141, 119, 258, 233, 266, 327, 242, 94, 97, 71, 331, 154, 166, 150, 333, 53, 363, 256, 308, 30, 342, 295, 63, 5, 367, 74, 268, 7, 46, 64, 76, 323, 41, 279, 283, 289, 369, 50, 14, 151, 42, 132, 358, 315, 101, 350, 230, 204, 28, 37] + 32: [148, 89, 83, 86, 238, 33, 237, 166, 45, 218, 120, 307, 348, 179, 175, 105, 221, 16, 194, 7, 334, 282, 190, 293, 322, 151, 53, 77, 380, 88, 110, 254, 60, 212, 126, 319, 87, 76, 150, 41, 213, 340, 231, 240, 377, 79, 280, 69, 292, 1, 129, 306, 32, 369, 18, 195, 121, 270, 315, 331, 178, 233, 154, 9, 128, 114, 370, 52, 248, 226, 314, 133, 199, 374, 31, 354, 3, 176, 350, 259, 379, 366, 295, 162, 260, 267, 97, 74, 38, 242, 62, 235, 11, 78, 117, 147, 106, 108, 227, 347, 55, 4, 229, 336, 335, 48, 171, 202, 40, 249, 58, 258, 243, 200, 136, 113, 153, 273, 261, 241, 368, 209, 21, 96, 19, 371, 297, 323, 68, 360, 49, 268, 274, 82, 339, 247, 342, 345, 51, 364, 278, 294, 232, 107, 122, 329, 70, 101, 239, 356, 10, 201, 35, 100, 164, 337, 134, 34, 90, 266, 288, 223, 376, 355, 119, 262, 43, 224, 152, 98, 289, 308, 37, 183, 296, 93, 91, 118, 244, 302, 245, 2, 80, 299, 198, 251, 135, 316, 161, 169, 180, 264, 163, 184, 367, 63, 168, 281, 157, 359, 324, 276, 160, 284, 85, 191, 131, 250, 139, 142, 219, 332, 214, 187, 256, 141, 286, 193, 36, 230, 330, 149, 59, 317, 72, 211, 127, 326, 279, 186, 67, 23, 271, 203, 353, 351, 263, 8, 298, 349, 313, 12, 42, 215, 197, 103, 22, 145, 343, 73, 66, 210, 170, 39, 328, 167, 321, 310, 225, 320, 46, 125, 275, 64, 358, 216, 318, 309, 124, 13, 54, 333, 47, 28, 112, 253, 123, 300, 44, 192, 14, 255, 291, 338, 272, 277, 290, 301, 362, 344, 352, 26, 24, 172, 99, 382, 155, 174, 285, 325, 252, 92, 5, 146, 143, 228, 156, 111, 165, 283, 6, 361, 206, 144, 75, 0, 303, 130, 205, 182, 327, 365, 109, 189, 137, 30, 207, 346, 95, 208, 140, 61, 378, 115, 246, 159, 234, 29, 204, 217, 25, 287, 50, 222, 116, 104, 357, 158, 196, 132, 94, 65, 269, 138, 363, 311, 102, 341, 373, 188, 265, 71, 181, 17, 15, 173, 84, 236, 81, 57, 372, 185, 304, 257, 177, 305, 27, 56, 20, 220, 381, 312, 375, 383] + 33: [91, 169, 377, 344, 342, 307, 38, 158, 51, 87, 255, 101, 94, 288, 191, 62, 14, 134, 323, 305, 132, 25, 79, 188, 170, 45, 182, 149, 318, 358, 347, 22, 233, 52, 85, 109, 67, 361, 72, 163, 141, 258, 335, 340, 267, 295, 212, 380, 360, 264, 123, 2, 226, 20, 222, 187, 362, 337, 356, 23, 197, 18, 110, 351, 143, 155, 312, 11, 116, 370, 284, 330, 136, 228, 53, 63, 7, 208, 78, 219, 332, 353, 282, 243, 24, 365, 310, 227, 15, 44, 32, 71, 95, 105, 128, 185, 177, 234, 167, 154, 66, 328, 338, 303, 261, 139, 229, 135, 183, 98, 41, 339, 273, 150, 204, 213, 130, 37, 8, 90, 382, 334, 202, 160, 240, 291, 343, 174, 374, 363, 6, 179, 84, 369, 224, 294, 138, 111, 9, 168, 359, 118, 12, 92, 10, 271, 100, 74, 315, 215, 157, 203, 50, 259, 248, 193, 235, 88, 230, 147, 21, 176, 27, 327, 241, 30, 16, 120, 201, 283, 251, 218, 126, 194, 189, 252, 244, 345, 114, 198, 97, 47, 119, 69, 253, 56, 186, 223, 266, 287, 298, 306, 127, 190, 262, 280, 89, 232, 59, 4, 270, 286, 319, 237, 320, 260, 381, 348, 151, 125, 217, 61, 153, 104, 31, 354, 57, 172, 80, 297, 205, 199, 254, 60, 124, 355, 40, 148, 275, 42, 162, 268, 129, 166, 39, 77, 366, 281, 206, 17, 250, 70, 164, 352, 103, 256, 313, 152, 367, 178, 290, 137, 214, 296, 209, 102, 195, 207, 26, 28, 173, 145, 112, 285, 161, 33, 184, 324, 292, 272, 372, 265, 156, 49, 304, 211, 257, 274, 13, 142, 29, 302, 236, 245, 309, 317, 326, 333, 144, 64, 113, 376, 48, 115, 108, 210, 81, 316, 314, 322, 5, 35, 311, 73, 325, 192, 375, 36, 321, 54, 238, 308, 289, 133, 121, 379, 146, 93, 247, 200, 299, 3, 329, 58, 1, 196, 96, 159, 75, 331, 181, 131, 99, 231, 349, 364, 249, 180, 171, 276, 269, 19, 300, 46, 246, 107, 43, 263, 76, 122, 371, 86, 68, 83, 82, 279, 350, 117, 65, 165, 242, 55, 341, 378, 216, 368, 221, 346, 175, 239, 225, 106, 140, 278, 277, 220, 0, 383, 336, 301, 34, 293, 357, 373] + 34: [179, 239, 136, 360, 379, 74, 283, 81, 293, 331, 294, 188, 298, 192, 348, 260, 332, 65, 80, 85, 23, 79, 104, 190, 97, 110, 148, 195, 342, 326, 120, 232, 364, 245, 131, 324, 314, 221, 270, 382, 155, 146, 305, 27, 142, 355, 344, 184, 267, 92, 353, 114, 210, 278, 118, 199, 170, 319, 77, 187, 67, 241, 227, 176, 209, 13, 175, 191, 50, 102, 68, 318, 115, 111, 35, 234, 316, 216, 215, 39, 252, 141, 11, 106, 189, 121, 309, 14, 19, 26, 38, 40, 43, 55, 56, 62, 16, 366, 288, 359, 333, 301, 87, 249, 206, 126, 345, 247, 185, 162, 158, 258, 54, 8, 4, 28, 72, 220, 123, 75, 226, 367, 350, 1, 208, 7, 41, 99, 280, 137, 31, 151, 17, 264, 330, 153, 48, 37, 88, 255, 362, 323, 9, 116, 295, 222, 130, 70, 250, 160, 163, 29, 211, 200, 224, 147, 117, 341, 165, 373, 266, 328, 186, 302, 94, 42, 282, 90, 140, 322, 164, 84, 251, 339, 343, 169, 378, 149, 86, 143, 193, 173, 310, 66, 71, 73, 76, 101, 103, 105, 112, 119, 107, 218, 238, 133, 306, 256, 354, 290, 15, 262, 203, 312, 171, 178, 60, 246, 337, 311, 159, 196, 59, 61, 230, 64, 2, 174, 47, 327, 82, 33, 272, 150, 268, 91, 271, 157, 276, 297, 254, 95, 315, 30, 134, 346, 144, 285, 357, 181, 34, 24, 124, 93, 6, 78, 253, 18, 63, 291, 233, 286, 204, 100, 380, 265, 304, 129, 205, 139, 279, 202, 236, 336, 113, 361, 212, 132, 275, 22, 12, 358, 20, 44, 207, 152, 349, 244, 313, 122, 127, 154, 156, 235, 242, 257, 281, 303, 108, 259, 368, 248, 370, 231, 36, 287, 194, 321, 284, 214, 3, 292, 138, 237, 58, 89, 69, 300, 340, 161, 52, 135, 168, 51, 263, 299, 83, 228, 374, 261, 219, 372, 223, 172, 329, 45, 5, 334, 125, 269, 317, 25, 369, 320, 145, 240, 180, 98, 46, 347, 21, 307, 109, 335, 167, 371, 381, 183, 201, 352, 53, 274, 277, 243, 96, 197, 225, 273, 0, 182, 49, 166, 296, 213, 198, 10, 229, 128, 217, 177, 32, 57, 289, 375, 308, 325, 338, 351, 356, 363, 365, 376, 377, 383] + 35: [182, 204, 131, 368, 277, 133, 271, 357, 174, 234, 11, 129, 242, 361, 353, 93, 58, 346, 9, 255, 324, 279, 380, 170, 322, 0, 40, 258, 132, 141, 212, 23, 262, 35, 352, 159, 313, 55, 241, 69, 101, 173, 296, 260, 108, 5, 226, 154, 329, 196, 49, 163, 137, 12, 82, 114, 349, 13, 4, 155, 140, 227, 341, 42, 314, 24, 181, 343, 30, 6, 87, 238, 36, 107, 14, 355, 278, 297, 336, 85, 66, 220, 303, 10, 345, 194, 46, 146, 286, 33, 305, 338, 25, 169, 280, 332, 363, 379, 157, 44, 205, 43, 67, 243, 128, 319, 224, 78, 201, 172, 130, 83, 56, 247, 53, 265, 268, 28, 91, 211, 306, 301, 348, 153, 161, 235, 374, 41, 283, 311, 334, 375, 45, 256, 15, 290, 350, 272, 208, 68, 276, 1, 298, 156, 233, 219, 171, 127, 142, 240, 27, 38, 261, 60, 193, 126, 315, 19, 143, 179, 369, 383, 376, 327, 21, 359, 105, 284, 54, 113, 254, 304, 366, 335, 365, 333, 373, 165, 223, 184, 135, 120, 100, 209, 158, 364, 293, 294, 51, 16, 81, 176, 106, 79, 203, 74, 331, 50, 269, 186, 3, 70, 328, 266, 17, 197, 183, 378, 149, 20, 112, 138, 125, 377, 139, 134, 312, 7, 222, 190, 124, 95, 65, 291, 162, 249, 59, 18, 215, 90, 160, 77, 231, 360, 117, 382, 76, 289, 337, 246, 109, 72, 103, 295, 229, 221, 344, 116, 292, 253, 202, 75, 214, 189, 216, 325, 302, 372, 232, 200, 275, 191, 259, 230, 299, 330, 145, 244, 354, 236, 2, 89, 308, 317, 26, 370, 347, 119, 371, 188, 39, 37, 245, 210, 150, 228, 177, 185, 48, 281, 362, 316, 122, 252, 358, 104, 92, 309, 250, 273, 164, 326, 31, 257, 94, 225, 110, 102, 96, 136, 121, 111, 351, 274, 318, 288, 187, 151, 213, 207, 285, 206, 8, 267, 148, 34, 167, 217, 63, 99, 22, 52, 166, 88, 180, 71, 248, 97, 239, 98, 339, 73, 321, 270, 175, 287, 62, 282, 144, 57, 32, 152, 123, 192, 84, 29, 86, 147, 195, 320, 342, 198, 367, 118, 237, 64, 61, 80, 323, 381, 307, 178, 263, 356, 218, 300, 199, 264, 168, 47, 340, 115, 251, 310] + 36: [304, 155, 352, 5, 293, 193, 138, 97, 158, 365, 247, 210, 374, 220, 176, 199, 265, 212, 364, 81, 299, 95, 71, 356, 94, 233, 160, 266, 362, 117, 101, 65, 17, 282, 110, 116, 88, 188, 99, 26, 7, 15, 174, 231, 255, 150, 225, 10, 245, 129, 119, 251, 242, 109, 18, 21, 56, 295, 149, 259, 66, 337, 120, 241, 367, 72, 326, 157, 29, 335, 173, 368, 190, 64, 307, 89, 204, 183, 55, 334, 222, 172, 148, 239, 346, 37, 221, 107, 96, 115, 123, 124, 253, 298, 313, 330, 232, 291, 331, 280, 274, 122, 76, 340, 370, 238, 207, 211, 285, 215, 201, 373, 103, 75, 297, 92, 12, 179, 156, 121, 187, 20, 283, 226, 44, 350, 131, 102, 227, 267, 108, 182, 135, 74, 114, 154, 73, 351, 60, 339, 258, 31, 163, 180, 263, 281, 53, 296, 240, 301, 269, 132, 235, 306, 8, 316, 314, 376, 224, 347, 83, 34, 284, 145, 151, 289, 234, 52, 33, 358, 3, 270, 147, 127, 11, 68, 320, 79, 361, 51, 128, 104, 372, 143, 186, 16, 336, 375, 360, 170, 353, 355, 22, 310, 134, 380, 200, 61, 100, 194, 14, 319, 359, 45, 196, 153, 322, 177, 162, 69, 46, 349, 198, 19, 342, 98, 272, 191, 161, 23, 287, 311, 181, 67, 219, 357, 354, 213, 112, 230, 82, 38, 144, 189, 140, 125, 366, 9, 246, 6, 244, 32, 303, 93, 195, 371, 85, 345, 50, 382, 341, 276, 42, 118, 70, 59, 136, 254, 277, 47, 363, 130, 206, 159, 165, 228, 338, 203, 292, 54, 378, 111, 250, 305, 302, 261, 214, 43, 39, 113, 252, 290, 315, 126, 86, 377, 0, 58, 197, 178, 184, 332, 348, 309, 288, 323, 321, 275, 237, 260, 264, 328, 278, 175, 308, 343, 168, 164, 57, 248, 87, 30, 2, 344, 257, 333, 137, 141, 62, 209, 249, 78, 171, 49, 139, 105, 369, 300, 294, 383, 192, 229, 35, 41, 185, 216, 77, 256, 133, 271, 48, 36, 166, 63, 80, 91, 318, 262, 217, 273, 279, 167, 381, 28, 379, 317, 329, 4, 208, 90, 202, 205, 236, 27, 106, 142, 325, 24, 84, 13, 1, 40, 152, 324, 25, 146, 169, 223, 312, 286, 243, 268, 327, 218] + 37: [218, 127, 252, 272, 367, 279, 174, 0, 223, 151, 40, 355, 227, 34, 60, 124, 185, 302, 254, 148, 27, 175, 292, 114, 365, 343, 291, 21, 1, 349, 149, 48, 19, 345, 126, 121, 156, 87, 298, 161, 231, 105, 164, 64, 262, 115, 173, 299, 361, 360, 341, 138, 153, 251, 206, 77, 353, 331, 245, 256, 284, 295, 282, 320, 178, 321, 358, 275, 337, 232, 165, 215, 145, 82, 319, 324, 370, 134, 122, 7, 120, 92, 380, 26, 339, 84, 96, 172, 220, 226, 236, 239, 249, 265, 352, 374, 69, 125, 29, 376, 179, 228, 30, 271, 130, 194, 240, 95, 158, 24, 129, 234, 322, 93, 6, 38, 242, 340, 342, 364, 309, 140, 143, 381, 289, 62, 222, 167, 208, 221, 52, 195, 327, 22, 347, 382, 207, 83, 200, 46, 338, 314, 243, 325, 157, 66, 59, 15, 183, 13, 264, 197, 212, 335, 334, 363, 210, 109, 74, 136, 259, 116, 285, 123, 135, 258, 304, 354, 32, 155, 90, 89, 273, 307, 244, 253, 350, 286, 293, 250, 142, 75, 31, 263, 170, 186, 266, 219, 132, 377, 63, 70, 372, 131, 16, 237, 368, 287, 65, 36, 163, 25, 166, 51, 49, 188, 277, 311, 10, 5, 71, 47, 88, 17, 351, 235, 147, 14, 192, 261, 86, 344, 73, 301, 39, 203, 41, 317, 315, 102, 18, 211, 205, 150, 2, 180, 241, 290, 144, 362, 274, 176, 308, 190, 201, 141, 100, 189, 42, 375, 154, 79, 280, 313, 336, 107, 113, 198, 72, 181, 303, 104, 369, 333, 373, 111, 94, 20, 278, 76, 99, 225, 248, 214, 326, 23, 54, 230, 209, 383, 9, 247, 56, 269, 68, 8, 12, 53, 294, 366, 268, 182, 118, 328, 37, 305, 133, 58, 199, 117, 85, 306, 44, 233, 159, 3, 318, 191, 202, 267, 193, 81, 257, 160, 332, 171, 67, 152, 110, 184, 97, 204, 359, 45, 270, 128, 316, 168, 224, 61, 329, 356, 50, 378, 238, 146, 177, 187, 323, 108, 379, 283, 169, 217, 229, 371, 213, 312, 106, 255, 78, 162, 119, 296, 297, 91, 260, 281, 103, 11, 346, 80, 139, 112, 216, 300, 43, 357, 98, 55, 246, 4, 33, 196, 101, 330, 310, 35, 276, 137, 348, 288, 28, 57] + 38: [6, 284, 321, 369, 112, 178, 154, 208, 373, 256, 177, 94, 70, 116, 352, 194, 139, 241, 23, 334, 157, 175, 372, 106, 324, 73, 274, 357, 115, 215, 158, 344, 117, 238, 104, 318, 351, 240, 85, 278, 182, 181, 276, 119, 110, 226, 207, 263, 261, 35, 310, 10, 42, 15, 118, 107, 105, 233, 81, 37, 80, 59, 62, 34, 159, 205, 247, 113, 155, 141, 137, 317, 18, 214, 375, 38, 254, 24, 285, 28, 160, 134, 169, 323, 356, 46, 210, 330, 60, 61, 64, 127, 185, 191, 193, 195, 366, 348, 203, 246, 292, 355, 40, 383, 111, 27, 332, 100, 74, 108, 245, 130, 120, 255, 69, 92, 147, 349, 49, 306, 31, 145, 189, 88, 152, 343, 3, 378, 7, 320, 202, 168, 21, 72, 235, 54, 296, 43, 265, 328, 101, 126, 360, 367, 368, 258, 257, 29, 311, 75, 93, 333, 290, 44, 338, 225, 211, 151, 52, 342, 196, 269, 45, 2, 294, 359, 250, 271, 281, 91, 174, 217, 345, 121, 143, 183, 370, 1, 365, 14, 273, 302, 232, 32, 109, 13, 66, 222, 198, 237, 304, 314, 266, 354, 230, 262, 11, 156, 171, 135, 236, 319, 293, 267, 30, 197, 228, 180, 199, 299, 227, 132, 248, 97, 56, 76, 9, 26, 51, 212, 167, 275, 99, 129, 187, 327, 136, 286, 163, 218, 82, 128, 288, 253, 87, 336, 268, 102, 22, 77, 176, 57, 213, 123, 96, 282, 339, 122, 186, 307, 289, 161, 150, 287, 146, 200, 243, 209, 48, 358, 252, 297, 162, 382, 201, 234, 166, 361, 65, 264, 192, 220, 272, 312, 12, 83, 305, 291, 103, 98, 84, 216, 114, 184, 242, 325, 346, 350, 331, 124, 19, 179, 301, 341, 17, 50, 221, 337, 279, 316, 63, 125, 379, 219, 144, 280, 259, 206, 0, 190, 68, 142, 313, 309, 20, 5, 164, 249, 53, 55, 329, 170, 295, 86, 41, 16, 78, 362, 172, 260, 347, 33, 326, 8, 335, 89, 322, 165, 36, 364, 149, 277, 229, 95, 204, 298, 58, 25, 173, 140, 303, 283, 371, 47, 308, 90, 381, 4, 138, 270, 224, 223, 131, 244, 380, 239, 79, 67, 148, 39, 315, 153, 340, 71, 300, 188, 377, 251, 133, 231, 376, 353, 363, 374] + 39: [102, 100, 353, 336, 187, 297, 372, 56, 319, 112, 248, 322, 323, 141, 14, 258, 87, 93, 213, 151, 244, 221, 28, 281, 161, 356, 54, 363, 254, 208, 284, 5, 41, 172, 185, 84, 135, 154, 58, 95, 25, 139, 13, 226, 344, 291, 148, 124, 261, 107, 17, 16, 65, 230, 326, 146, 167, 309, 289, 30, 33, 66, 365, 39, 178, 266, 232, 376, 205, 2, 217, 145, 334, 229, 293, 90, 311, 122, 355, 20, 158, 321, 371, 382, 270, 119, 219, 330, 186, 27, 171, 111, 216, 184, 142, 350, 282, 236, 127, 110, 15, 170, 153, 223, 163, 383, 290, 260, 367, 7, 18, 129, 347, 333, 227, 203, 252, 242, 80, 200, 40, 101, 11, 303, 286, 169, 246, 214, 312, 339, 36, 253, 197, 245, 181, 277, 292, 251, 378, 285, 77, 196, 125, 79, 283, 206, 23, 233, 76, 194, 37, 373, 324, 173, 366, 123, 234, 201, 55, 329, 348, 50, 255, 190, 168, 45, 250, 263, 152, 143, 211, 331, 131, 209, 276, 231, 224, 308, 375, 117, 38, 150, 73, 115, 317, 301, 341, 327, 195, 136, 19, 4, 86, 352, 116, 274, 220, 368, 315, 177, 199, 359, 369, 118, 212, 155, 144, 62, 235, 351, 247, 377, 60, 164, 133, 298, 126, 380, 82, 360, 204, 113, 257, 81, 160, 32, 121, 104, 210, 147, 31, 69, 26, 71, 320, 70, 97, 192, 132, 162, 182, 49, 46, 103, 279, 337, 106, 239, 294, 105, 310, 159, 98, 267, 166, 91, 228, 271, 120, 176, 92, 52, 51, 10, 0, 342, 357, 259, 157, 78, 287, 193, 165, 137, 243, 85, 64, 130, 9, 189, 314, 265, 22, 198, 370, 89, 108, 240, 134, 96, 180, 191, 328, 280, 379, 1, 264, 306, 300, 295, 68, 307, 114, 53, 99, 61, 225, 75, 374, 140, 138, 88, 381, 156, 48, 362, 34, 275, 272, 183, 332, 59, 63, 67, 296, 218, 335, 202, 249, 325, 313, 128, 299, 364, 273, 305, 175, 8, 6, 268, 354, 35, 3, 109, 346, 43, 302, 74, 207, 358, 174, 215, 24, 21, 316, 47, 237, 188, 343, 349, 83, 29, 179, 42, 222, 338, 262, 94, 269, 149, 345, 72, 238, 44, 304, 12, 288, 241, 278, 57, 256, 318, 361, 340] + 40: [297, 59, 12, 249, 2, 132, 187, 275, 179, 51, 21, 13, 182, 45, 202, 148, 345, 135, 7, 163, 159, 282, 294, 81, 365, 158, 85, 102, 175, 286, 46, 355, 201, 146, 261, 291, 54, 254, 363, 177, 203, 15, 255, 86, 114, 57, 265, 193, 156, 16, 379, 373, 262, 230, 351, 95, 229, 224, 296, 28, 133, 119, 155, 326, 366, 24, 112, 323, 195, 302, 90, 221, 270, 103, 125, 364, 240, 318, 211, 304, 110, 38, 19, 61, 107, 142, 144, 128, 252, 320, 8, 105, 317, 58, 122, 171, 207, 136, 272, 216, 181, 244, 258, 55, 160, 303, 10, 260, 71, 238, 209, 48, 349, 290, 360, 121, 340, 368, 82, 108, 357, 215, 89, 369, 141, 256, 87, 250, 251, 184, 298, 17, 26, 353, 120, 213, 247, 130, 69, 293, 131, 126, 278, 5, 288, 65, 91, 151, 0, 29, 66, 167, 263, 44, 169, 324, 329, 41, 33, 267, 113, 189, 321, 378, 226, 352, 374, 310, 375, 191, 157, 32, 266, 273, 178, 168, 228, 49, 346, 25, 248, 313, 20, 94, 164, 306, 27, 217, 22, 9, 50, 115, 269, 162, 188, 180, 67, 166, 227, 129, 239, 232, 23, 274, 6, 347, 83, 137, 358, 237, 284, 64, 186, 333, 253, 327, 271, 53, 1, 205, 18, 341, 289, 73, 60, 283, 339, 305, 96, 370, 63, 285, 212, 194, 196, 145, 37, 208, 336, 35, 337, 77, 200, 246, 312, 197, 140, 331, 183, 382, 101, 176, 4, 134, 30, 348, 43, 206, 117, 165, 343, 311, 299, 56, 235, 123, 315, 34, 152, 356, 371, 42, 377, 99, 88, 39, 361, 344, 154, 335, 68, 149, 314, 62, 325, 147, 92, 170, 31, 100, 190, 334, 93, 281, 75, 338, 287, 79, 40, 150, 153, 80, 74, 143, 78, 104, 332, 301, 127, 172, 3, 76, 198, 185, 236, 319, 280, 192, 316, 359, 204, 372, 308, 322, 116, 220, 259, 219, 383, 367, 11, 98, 231, 234, 330, 268, 233, 36, 52, 264, 118, 225, 362, 223, 84, 174, 199, 139, 242, 70, 328, 47, 161, 307, 381, 97, 354, 277, 124, 276, 111, 72, 210, 222, 109, 173, 257, 309, 279, 245, 295, 14, 376, 138, 380, 300, 292, 243, 241, 218, 342, 106, 350, 214] + 41: [205, 318, 202, 111, 0, 337, 341, 43, 232, 76, 206, 249, 56, 86, 139, 19, 153, 13, 150, 183, 136, 330, 2, 87, 180, 103, 200, 188, 342, 218, 311, 95, 226, 349, 163, 189, 16, 45, 279, 227, 129, 146, 126, 271, 313, 211, 214, 116, 118, 260, 105, 21, 335, 161, 230, 97, 317, 282, 195, 181, 360, 54, 371, 5, 160, 290, 68, 208, 364, 162, 73, 72, 209, 378, 380, 40, 74, 9, 71, 280, 250, 33, 213, 149, 257, 184, 138, 94, 88, 26, 287, 361, 219, 277, 29, 141, 350, 79, 359, 264, 383, 112, 235, 3, 144, 168, 234, 166, 96, 84, 256, 12, 90, 261, 140, 286, 283, 27, 147, 154, 82, 276, 212, 7, 294, 25, 156, 122, 171, 307, 248, 80, 351, 177, 204, 182, 345, 145, 382, 300, 348, 1, 169, 123, 268, 332, 114, 203, 224, 117, 228, 225, 305, 296, 199, 4, 352, 134, 152, 121, 106, 243, 50, 344, 299, 298, 133, 308, 167, 278, 210, 253, 65, 131, 51, 41, 263, 221, 130, 186, 81, 78, 285, 6, 336, 100, 173, 85, 48, 52, 233, 288, 125, 273, 24, 262, 237, 185, 292, 135, 124, 338, 347, 254, 238, 8, 172, 217, 220, 142, 374, 379, 174, 107, 333, 35, 113, 269, 42, 66, 370, 322, 302, 316, 266, 61, 331, 310, 372, 75, 334, 194, 358, 55, 241, 34, 196, 289, 137, 30, 60, 190, 59, 14, 119, 381, 91, 187, 375, 159, 274, 258, 366, 367, 270, 315, 157, 321, 319, 301, 284, 15, 295, 115, 252, 69, 109, 62, 58, 22, 148, 297, 247, 328, 354, 17, 175, 325, 151, 83, 304, 293, 216, 10, 357, 132, 346, 281, 170, 306, 324, 329, 201, 44, 275, 28, 363, 368, 101, 242, 339, 191, 207, 49, 198, 223, 222, 77, 53, 158, 323, 356, 70, 165, 244, 98, 178, 327, 179, 355, 197, 37, 164, 143, 89, 57, 369, 251, 23, 320, 215, 340, 231, 127, 32, 67, 326, 120, 314, 236, 110, 259, 92, 128, 309, 108, 93, 245, 362, 291, 373, 47, 343, 272, 104, 176, 240, 239, 46, 20, 303, 246, 255, 18, 192, 193, 63, 11, 155, 229, 36, 265, 39, 38, 365, 377, 267, 99, 353, 102, 31, 64, 376, 312] + 42: [306, 77, 80, 238, 98, 87, 268, 251, 101, 138, 88, 303, 33, 197, 154, 41, 282, 209, 164, 150, 356, 151, 351, 285, 178, 92, 277, 311, 0, 248, 60, 217, 181, 244, 312, 3, 232, 247, 362, 284, 75, 34, 261, 134, 256, 76, 353, 78, 86, 71, 38, 348, 375, 149, 215, 155, 221, 349, 258, 168, 195, 345, 267, 146, 292, 31, 338, 355, 382, 250, 346, 334, 369, 69, 24, 141, 65, 46, 347, 198, 187, 339, 42, 211, 192, 174, 243, 121, 304, 177, 372, 153, 318, 14, 99, 270, 266, 200, 166, 118, 319, 37, 212, 373, 16, 272, 135, 202, 241, 378, 359, 120, 302, 161, 296, 263, 295, 321, 222, 20, 2, 226, 316, 32, 68, 317, 231, 350, 333, 184, 140, 145, 193, 147, 264, 260, 343, 139, 79, 47, 36, 220, 67, 119, 186, 246, 49, 299, 331, 172, 66, 45, 305, 207, 43, 210, 157, 254, 324, 22, 327, 381, 249, 276, 18, 6, 223, 183, 72, 180, 109, 191, 107, 62, 206, 19, 143, 162, 199, 136, 322, 205, 214, 28, 269, 340, 51, 208, 89, 370, 25, 286, 123, 111, 17, 21, 196, 114, 274, 55, 103, 291, 367, 364, 132, 320, 59, 275, 48, 283, 315, 52, 290, 167, 12, 148, 61, 236, 328, 281, 90, 131, 228, 293, 255, 179, 301, 230, 115, 122, 15, 1, 169, 83, 245, 84, 158, 156, 298, 97, 314, 23, 240, 100, 288, 227, 354, 85, 5, 377, 7, 262, 70, 329, 294, 40, 335, 27, 332, 313, 159, 330, 357, 371, 323, 173, 365, 4, 225, 194, 383, 94, 219, 128, 253, 361, 229, 363, 74, 190, 142, 224, 113, 126, 216, 242, 58, 50, 176, 325, 189, 204, 358, 93, 279, 336, 300, 56, 116, 265, 152, 308, 239, 129, 366, 380, 326, 280, 125, 309, 8, 117, 54, 102, 201, 175, 30, 218, 342, 112, 26, 259, 237, 130, 44, 287, 127, 144, 341, 344, 213, 11, 104, 170, 252, 368, 374, 379, 133, 124, 310, 29, 13, 352, 234, 171, 82, 297, 278, 35, 73, 96, 376, 57, 9, 307, 64, 289, 203, 235, 337, 10, 360, 257, 63, 110, 160, 91, 188, 105, 165, 53, 95, 185, 106, 137, 108, 233, 273, 81, 182, 271, 163, 39] + 43: [315, 202, 211, 243, 61, 55, 252, 218, 319, 366, 63, 324, 364, 258, 209, 170, 200, 27, 30, 156, 80, 356, 338, 46, 318, 379, 335, 341, 16, 149, 342, 267, 183, 371, 1, 306, 115, 72, 368, 163, 232, 269, 271, 193, 13, 70, 185, 109, 255, 157, 137, 189, 249, 215, 199, 321, 37, 327, 317, 314, 212, 8, 130, 162, 350, 284, 105, 268, 178, 247, 145, 295, 133, 78, 230, 229, 112, 45, 289, 91, 228, 296, 15, 245, 14, 43, 181, 51, 195, 370, 58, 29, 340, 104, 294, 21, 346, 36, 240, 239, 219, 272, 69, 194, 74, 108, 172, 92, 159, 84, 52, 152, 125, 190, 337, 120, 56, 191, 127, 339, 288, 363, 86, 333, 220, 374, 347, 77, 186, 330, 40, 201, 168, 221, 282, 93, 71, 205, 32, 147, 382, 94, 122, 65, 180, 278, 351, 276, 54, 286, 287, 131, 277, 301, 124, 355, 250, 33, 44, 113, 357, 312, 305, 31, 6, 102, 136, 349, 372, 187, 41, 118, 150, 353, 3, 90, 334, 241, 236, 231, 177, 248, 169, 206, 10, 89, 320, 7, 4, 208, 106, 281, 283, 75, 198, 97, 101, 161, 167, 298, 256, 76, 358, 238, 100, 224, 260, 223, 166, 378, 142, 188, 323, 138, 9, 20, 22, 0, 336, 290, 375, 303, 73, 380, 49, 204, 48, 207, 275, 210, 251, 62, 225, 99, 151, 68, 300, 280, 291, 377, 265, 17, 88, 38, 164, 50, 365, 222, 39, 184, 226, 254, 141, 261, 66, 263, 270, 111, 18, 264, 135, 325, 128, 373, 82, 23, 19, 376, 197, 331, 5, 192, 126, 227, 361, 110, 292, 313, 213, 348, 176, 326, 60, 307, 328, 47, 310, 381, 116, 293, 53, 262, 107, 344, 175, 96, 237, 216, 257, 242, 235, 279, 196, 2, 345, 160, 311, 383, 146, 274, 26, 98, 203, 369, 103, 253, 85, 59, 123, 87, 297, 34, 343, 140, 83, 35, 332, 302, 67, 352, 121, 148, 308, 12, 299, 153, 42, 362, 259, 359, 179, 171, 316, 129, 309, 139, 273, 155, 134, 173, 360, 154, 143, 329, 24, 117, 367, 322, 285, 244, 95, 119, 144, 182, 79, 158, 246, 28, 57, 233, 165, 114, 11, 81, 266, 214, 25, 174, 64, 304, 234, 354, 132, 217] + 44: [64, 267, 95, 242, 26, 35, 275, 299, 334, 74, 351, 250, 63, 217, 318, 98, 124, 66, 212, 215, 238, 86, 173, 43, 24, 324, 199, 57, 13, 171, 85, 300, 101, 200, 330, 182, 251, 187, 342, 372, 383, 123, 87, 258, 349, 80, 79, 180, 41, 181, 273, 264, 190, 32, 142, 317, 155, 1, 226, 108, 214, 118, 147, 294, 46, 193, 241, 310, 346, 231, 53, 341, 283, 357, 78, 134, 316, 197, 308, 152, 23, 322, 65, 116, 245, 362, 309, 344, 107, 326, 230, 339, 71, 307, 198, 297, 102, 36, 350, 285, 280, 91, 61, 243, 239, 105, 186, 255, 347, 175, 207, 305, 237, 268, 93, 130, 295, 121, 89, 284, 289, 338, 221, 290, 356, 336, 371, 109, 379, 153, 192, 249, 50, 353, 164, 33, 172, 323, 111, 3, 113, 374, 159, 286, 304, 110, 281, 332, 203, 359, 28, 39, 122, 97, 358, 22, 62, 261, 277, 68, 329, 169, 115, 375, 0, 149, 47, 140, 382, 45, 380, 210, 206, 259, 225, 220, 302, 311, 42, 365, 364, 154, 208, 106, 335, 354, 148, 136, 373, 112, 248, 88, 15, 10, 369, 163, 84, 263, 227, 256, 265, 224, 73, 14, 82, 194, 272, 131, 287, 253, 271, 257, 137, 222, 177, 166, 178, 126, 76, 156, 117, 77, 188, 202, 99, 54, 355, 92, 44, 21, 19, 282, 59, 128, 201, 312, 157, 366, 67, 345, 25, 314, 90, 376, 160, 204, 141, 37, 298, 83, 327, 331, 360, 229, 240, 27, 370, 56, 30, 17, 31, 328, 120, 9, 7, 150, 367, 135, 361, 247, 170, 146, 168, 133, 319, 16, 320, 195, 138, 270, 363, 12, 5, 174, 321, 183, 211, 129, 274, 6, 213, 279, 254, 333, 266, 125, 51, 244, 218, 4, 38, 165, 296, 94, 276, 191, 292, 100, 75, 378, 96, 103, 381, 34, 352, 179, 340, 313, 348, 325, 269, 127, 48, 145, 233, 18, 236, 343, 143, 288, 235, 301, 306, 260, 234, 52, 151, 139, 189, 262, 278, 104, 158, 144, 69, 337, 223, 228, 2, 232, 114, 8, 40, 196, 81, 184, 209, 70, 11, 176, 303, 60, 185, 55, 20, 291, 246, 315, 162, 58, 368, 167, 219, 119, 216, 29, 72, 161, 252, 49, 293, 205, 377, 132] + 45: [131, 144, 79, 179, 116, 178, 369, 52, 165, 155, 208, 373, 367, 37, 275, 331, 284, 207, 253, 319, 239, 365, 315, 10, 212, 99, 242, 341, 87, 0, 216, 217, 63, 204, 105, 161, 292, 339, 147, 158, 160, 243, 177, 21, 47, 168, 140, 129, 143, 310, 92, 110, 317, 16, 151, 377, 68, 357, 353, 259, 43, 252, 370, 56, 127, 135, 75, 67, 66, 258, 24, 300, 14, 115, 227, 157, 294, 362, 64, 244, 206, 28, 272, 77, 214, 89, 69, 111, 86, 210, 53, 117, 11, 287, 326, 347, 283, 281, 61, 236, 186, 282, 222, 256, 356, 146, 298, 220, 333, 261, 141, 50, 273, 82, 162, 125, 29, 25, 274, 233, 95, 378, 269, 215, 246, 123, 325, 176, 73, 359, 80, 51, 191, 202, 180, 279, 7, 142, 104, 289, 219, 139, 91, 205, 185, 102, 84, 23, 45, 39, 156, 265, 306, 303, 361, 291, 344, 173, 35, 264, 374, 153, 198, 200, 88, 187, 245, 108, 240, 183, 169, 171, 49, 371, 368, 132, 133, 305, 3, 30, 211, 195, 13, 137, 336, 358, 270, 136, 22, 42, 337, 167, 350, 201, 109, 31, 372, 118, 286, 330, 189, 46, 145, 262, 249, 335, 277, 54, 383, 382, 166, 301, 360, 101, 20, 322, 238, 225, 128, 8, 100, 114, 41, 346, 295, 232, 152, 26, 154, 34, 323, 72, 113, 119, 188, 228, 106, 381, 320, 71, 15, 170, 33, 164, 199, 324, 235, 203, 351, 159, 379, 213, 268, 218, 121, 307, 328, 6, 94, 181, 74, 321, 355, 90, 76, 18, 55, 313, 376, 231, 380, 257, 288, 302, 338, 312, 9, 4, 263, 192, 112, 148, 297, 230, 38, 12, 174, 311, 96, 234, 175, 327, 254, 182, 48, 348, 260, 58, 27, 138, 62, 120, 329, 134, 32, 196, 280, 163, 78, 70, 366, 2, 296, 149, 375, 278, 247, 267, 97, 334, 250, 150, 223, 36, 81, 290, 122, 293, 59, 308, 318, 103, 343, 345, 332, 85, 354, 248, 285, 107, 363, 5, 340, 197, 224, 349, 314, 44, 316, 226, 251, 276, 1, 65, 309, 40, 342, 271, 352, 57, 124, 60, 304, 255, 229, 237, 241, 126, 190, 299, 184, 17, 364, 83, 266, 194, 130, 221, 193, 19, 209, 172, 93, 98] + 46: [207, 224, 247, 376, 339, 152, 102, 103, 199, 105, 253, 362, 2, 104, 353, 355, 49, 164, 342, 8, 93, 322, 99, 313, 71, 12, 348, 328, 4, 30, 245, 201, 337, 17, 372, 312, 329, 264, 299, 88, 163, 121, 144, 176, 26, 80, 357, 165, 255, 187, 156, 95, 22, 359, 24, 235, 331, 107, 340, 65, 73, 59, 287, 18, 333, 46, 365, 174, 252, 270, 237, 1, 202, 231, 225, 56, 150, 37, 300, 5, 53, 307, 294, 295, 220, 50, 184, 15, 43, 175, 132, 248, 189, 251, 293, 216, 106, 239, 170, 168, 374, 7, 68, 212, 278, 136, 232, 131, 324, 75, 23, 256, 368, 217, 76, 82, 161, 345, 311, 280, 38, 273, 208, 292, 25, 352, 284, 67, 360, 381, 323, 267, 33, 218, 114, 160, 10, 242, 258, 186, 169, 39, 66, 369, 120, 364, 153, 356, 283, 86, 233, 85, 90, 213, 183, 286, 110, 260, 244, 118, 228, 297, 146, 289, 214, 318, 14, 275, 277, 282, 335, 238, 316, 28, 63, 94, 122, 196, 173, 272, 227, 330, 92, 288, 358, 182, 281, 383, 147, 341, 361, 167, 44, 343, 58, 221, 204, 319, 139, 271, 268, 166, 126, 254, 193, 246, 51, 234, 141, 155, 180, 290, 87, 97, 64, 125, 188, 52, 327, 354, 137, 69, 96, 320, 171, 230, 162, 249, 62, 338, 29, 219, 91, 70, 21, 77, 203, 226, 344, 109, 261, 363, 380, 305, 298, 116, 133, 40, 296, 291, 172, 98, 366, 177, 123, 179, 222, 336, 191, 19, 83, 47, 31, 262, 151, 332, 72, 178, 13, 157, 108, 304, 112, 79, 20, 81, 27, 145, 370, 309, 200, 257, 16, 3, 350, 54, 347, 61, 142, 111, 303, 158, 45, 9, 194, 149, 210, 351, 198, 6, 276, 274, 34, 211, 367, 377, 206, 124, 301, 266, 205, 127, 334, 35, 263, 285, 129, 101, 259, 375, 265, 240, 229, 57, 223, 11, 314, 154, 130, 143, 36, 209, 215, 269, 84, 378, 134, 89, 159, 113, 192, 195, 241, 140, 349, 317, 128, 181, 321, 306, 243, 100, 346, 185, 115, 315, 74, 41, 42, 308, 373, 279, 190, 117, 382, 78, 138, 48, 119, 379, 60, 135, 32, 55, 148, 310, 326, 236, 0, 197, 250, 371, 325, 302] + 47: [54, 330, 346, 370, 296, 123, 136, 61, 93, 244, 367, 98, 137, 4, 267, 210, 231, 377, 53, 189, 322, 141, 24, 76, 203, 158, 0, 108, 361, 264, 250, 172, 74, 282, 62, 202, 20, 132, 331, 213, 295, 319, 177, 121, 276, 12, 269, 107, 360, 236, 316, 345, 257, 169, 148, 207, 59, 321, 31, 341, 356, 304, 363, 205, 113, 233, 225, 354, 379, 170, 273, 239, 358, 38, 68, 64, 71, 283, 325, 149, 144, 88, 100, 69, 40, 160, 135, 99, 79, 300, 84, 8, 167, 270, 21, 272, 162, 299, 65, 41, 131, 195, 87, 179, 27, 103, 118, 208, 129, 352, 366, 154, 196, 111, 280, 328, 308, 275, 156, 83, 117, 187, 259, 26, 66, 312, 81, 70, 306, 176, 218, 45, 17, 44, 193, 373, 298, 291, 101, 95, 30, 302, 333, 116, 229, 109, 120, 163, 368, 183, 279, 157, 194, 320, 228, 89, 153, 324, 309, 190, 182, 266, 353, 28, 287, 72, 274, 178, 351, 286, 336, 92, 339, 206, 261, 251, 104, 15, 348, 86, 256, 124, 161, 220, 248, 260, 152, 56, 150, 214, 318, 364, 265, 90, 243, 106, 200, 63, 168, 77, 204, 357, 175, 43, 285, 52, 301, 18, 119, 284, 372, 371, 134, 262, 376, 36, 232, 337, 329, 305, 155, 271, 294, 216, 211, 359, 35, 173, 192, 9, 201, 143, 238, 14, 16, 82, 315, 281, 34, 198, 164, 365, 221, 33, 277, 184, 226, 13, 181, 334, 254, 37, 11, 335, 102, 209, 23, 327, 217, 219, 252, 230, 222, 241, 186, 130, 258, 146, 245, 166, 355, 268, 313, 25, 311, 142, 383, 110, 344, 253, 115, 47, 246, 288, 96, 78, 381, 380, 29, 2, 127, 235, 3, 50, 375, 185, 347, 303, 42, 314, 48, 292, 67, 122, 140, 180, 94, 290, 75, 128, 240, 151, 224, 342, 73, 46, 374, 171, 165, 212, 51, 138, 105, 174, 133, 317, 307, 60, 139, 343, 297, 362, 97, 197, 215, 188, 278, 147, 80, 39, 85, 289, 1, 338, 234, 227, 223, 263, 369, 378, 91, 249, 57, 310, 247, 159, 255, 10, 22, 32, 382, 199, 242, 332, 237, 293, 49, 125, 19, 323, 55, 340, 126, 350, 6, 349, 114, 191, 326, 7, 5, 145, 58, 112] + 48: [271, 275, 86, 364, 311, 128, 112, 290, 323, 24, 317, 316, 370, 119, 346, 223, 102, 101, 3, 261, 123, 38, 146, 213, 56, 305, 45, 297, 263, 281, 21, 162, 247, 212, 330, 82, 23, 220, 148, 7, 218, 376, 358, 118, 87, 293, 195, 239, 219, 362, 133, 211, 347, 156, 47, 126, 322, 157, 135, 92, 52, 227, 280, 100, 17, 57, 69, 29, 278, 285, 93, 294, 97, 327, 15, 131, 203, 369, 299, 0, 252, 206, 303, 46, 288, 348, 310, 284, 245, 36, 201, 10, 260, 153, 105, 196, 141, 329, 344, 88, 77, 185, 58, 170, 33, 189, 12, 174, 242, 91, 117, 34, 276, 254, 19, 179, 314, 343, 132, 32, 363, 320, 382, 49, 205, 14, 76, 55, 120, 43, 269, 319, 198, 80, 90, 54, 255, 342, 253, 63, 4, 37, 155, 298, 274, 18, 190, 143, 20, 165, 228, 268, 187, 307, 53, 295, 64, 39, 312, 224, 334, 136, 129, 361, 25, 103, 259, 324, 61, 95, 338, 374, 231, 336, 345, 41, 67, 304, 70, 216, 184, 243, 339, 163, 351, 68, 200, 8, 332, 96, 188, 250, 207, 287, 318, 367, 321, 130, 35, 192, 151, 166, 107, 152, 159, 258, 235, 98, 335, 273, 48, 99, 127, 353, 81, 368, 357, 279, 51, 172, 74, 237, 350, 59, 106, 178, 13, 145, 208, 352, 296, 150, 138, 122, 286, 164, 371, 300, 337, 289, 137, 42, 169, 306, 373, 191, 199, 134, 31, 113, 173, 140, 246, 229, 232, 197, 50, 380, 341, 44, 282, 377, 315, 168, 379, 302, 222, 215, 301, 183, 251, 383, 167, 262, 79, 209, 267, 30, 40, 256, 331, 277, 160, 1, 204, 84, 308, 66, 65, 226, 116, 72, 26, 139, 264, 109, 73, 234, 115, 326, 108, 325, 272, 291, 161, 283, 233, 121, 75, 176, 154, 194, 28, 111, 158, 193, 360, 142, 144, 340, 180, 225, 202, 22, 328, 177, 365, 359, 244, 210, 240, 313, 230, 375, 147, 78, 125, 11, 9, 182, 16, 292, 236, 83, 241, 249, 5, 248, 104, 381, 2, 257, 186, 378, 6, 265, 85, 124, 214, 171, 94, 60, 89, 110, 266, 71, 333, 217, 175, 62, 356, 366, 309, 238, 114, 221, 354, 372, 355, 181, 270, 149, 27, 349] + 49: [210, 304, 248, 194, 338, 199, 56, 153, 190, 205, 351, 214, 216, 36, 150, 14, 286, 84, 169, 174, 251, 57, 299, 16, 311, 253, 300, 17, 316, 215, 314, 66, 262, 104, 27, 295, 333, 37, 163, 212, 32, 33, 122, 69, 183, 192, 259, 356, 328, 18, 227, 323, 234, 45, 282, 102, 350, 137, 22, 331, 334, 100, 355, 188, 107, 83, 75, 327, 201, 226, 191, 222, 4, 87, 24, 211, 48, 93, 329, 103, 128, 182, 318, 285, 324, 219, 112, 135, 383, 341, 291, 123, 129, 124, 145, 229, 302, 202, 116, 206, 78, 365, 271, 133, 312, 5, 265, 59, 91, 47, 151, 114, 173, 81, 198, 289, 359, 85, 221, 224, 284, 21, 26, 209, 19, 118, 270, 277, 362, 258, 168, 158, 360, 40, 138, 306, 46, 117, 371, 247, 35, 74, 278, 340, 354, 62, 171, 176, 166, 126, 301, 142, 9, 144, 319, 297, 266, 379, 187, 377, 134, 272, 42, 346, 313, 256, 60, 307, 96, 165, 31, 315, 373, 88, 8, 257, 357, 255, 106, 170, 13, 349, 317, 67, 217, 200, 10, 28, 131, 358, 51, 68, 208, 353, 120, 279, 233, 235, 86, 276, 197, 193, 240, 236, 148, 180, 111, 330, 23, 195, 361, 376, 20, 238, 189, 250, 110, 267, 298, 204, 54, 132, 181, 196, 275, 273, 53, 336, 155, 76, 225, 213, 268, 303, 310, 34, 136, 321, 274, 162, 159, 294, 146, 293, 65, 348, 11, 109, 140, 125, 30, 296, 108, 167, 325, 39, 249, 2, 366, 113, 139, 337, 364, 43, 243, 71, 105, 92, 152, 149, 231, 228, 130, 280, 64, 79, 119, 115, 177, 380, 309, 287, 0, 97, 3, 237, 347, 367, 374, 156, 220, 58, 292, 164, 261, 179, 94, 342, 363, 95, 61, 157, 223, 44, 369, 381, 141, 89, 77, 49, 264, 161, 339, 283, 172, 73, 6, 378, 345, 98, 288, 241, 185, 344, 322, 7, 368, 370, 320, 218, 239, 178, 15, 127, 263, 326, 281, 269, 335, 82, 50, 12, 242, 246, 41, 55, 63, 38, 72, 70, 175, 160, 52, 154, 186, 121, 343, 252, 207, 90, 290, 29, 254, 147, 305, 230, 184, 245, 143, 260, 25, 375, 244, 80, 1, 382, 332, 372, 352, 99, 101, 232, 203, 308] + 50: [306, 268, 180, 358, 353, 138, 315, 187, 252, 58, 90, 275, 6, 189, 214, 63, 185, 281, 256, 51, 28, 366, 240, 249, 126, 344, 153, 327, 152, 17, 77, 266, 148, 157, 350, 108, 135, 210, 217, 96, 119, 125, 294, 121, 39, 70, 134, 7, 372, 113, 21, 312, 136, 213, 177, 239, 324, 206, 375, 149, 225, 64, 98, 357, 142, 349, 11, 231, 53, 147, 154, 383, 258, 219, 259, 20, 293, 376, 137, 282, 196, 347, 2, 82, 292, 245, 99, 190, 61, 373, 341, 365, 103, 257, 264, 298, 72, 9, 175, 297, 193, 42, 86, 14, 380, 279, 69, 300, 270, 243, 160, 340, 38, 127, 333, 205, 3, 220, 336, 208, 322, 325, 156, 229, 159, 95, 194, 236, 226, 235, 10, 23, 116, 54, 146, 144, 355, 66, 269, 202, 18, 321, 287, 164, 227, 163, 295, 351, 224, 248, 359, 369, 247, 371, 263, 310, 307, 255, 317, 209, 102, 91, 334, 26, 356, 84, 139, 29, 85, 335, 151, 379, 131, 120, 40, 167, 221, 260, 276, 360, 198, 34, 179, 250, 106, 363, 211, 216, 207, 176, 237, 83, 33, 318, 129, 1, 343, 5, 75, 0, 370, 49, 15, 115, 232, 141, 41, 301, 16, 352, 31, 346, 284, 261, 267, 285, 186, 277, 242, 22, 45, 8, 299, 68, 158, 81, 74, 171, 36, 114, 234, 71, 378, 161, 46, 251, 184, 288, 165, 362, 24, 155, 174, 238, 118, 43, 289, 60, 32, 67, 339, 331, 145, 150, 323, 52, 253, 178, 241, 80, 78, 309, 183, 173, 228, 367, 55, 326, 222, 62, 204, 30, 280, 291, 332, 47, 330, 87, 181, 316, 37, 286, 278, 105, 308, 345, 4, 172, 192, 329, 27, 117, 348, 97, 218, 124, 338, 166, 123, 212, 57, 92, 188, 381, 169, 122, 311, 130, 12, 382, 88, 246, 361, 320, 197, 94, 314, 56, 110, 48, 162, 25, 100, 319, 215, 133, 143, 342, 271, 313, 223, 274, 354, 107, 104, 265, 328, 230, 44, 35, 89, 272, 377, 50, 112, 254, 109, 203, 302, 304, 283, 73, 195, 111, 305, 273, 191, 233, 244, 296, 262, 59, 182, 101, 168, 140, 368, 199, 303, 170, 374, 132, 201, 128, 337, 200, 65, 19, 79, 93, 13, 364, 76, 290] + 51: [24, 240, 253, 10, 114, 203, 342, 86, 130, 341, 201, 120, 98, 198, 100, 266, 210, 46, 279, 44, 149, 18, 190, 304, 103, 17, 81, 193, 351, 375, 88, 282, 292, 123, 325, 364, 66, 180, 363, 134, 36, 132, 113, 239, 52, 333, 286, 7, 185, 230, 222, 138, 261, 367, 56, 267, 252, 175, 191, 331, 303, 365, 50, 339, 274, 317, 366, 231, 354, 19, 93, 60, 377, 275, 147, 154, 55, 243, 347, 376, 21, 296, 370, 166, 116, 151, 181, 174, 352, 2, 61, 173, 179, 256, 269, 273, 137, 184, 194, 32, 177, 219, 260, 20, 335, 90, 359, 171, 234, 197, 322, 326, 82, 299, 320, 119, 232, 334, 225, 321, 74, 108, 270, 143, 62, 355, 382, 285, 371, 278, 12, 315, 254, 308, 360, 346, 152, 343, 76, 192, 217, 131, 136, 211, 238, 75, 300, 345, 205, 307, 37, 281, 196, 38, 358, 5, 73, 316, 224, 319, 268, 310, 244, 51, 54, 111, 57, 83, 305, 248, 6, 80, 361, 95, 218, 318, 124, 383, 290, 15, 117, 214, 178, 67, 168, 255, 349, 272, 70, 170, 156, 42, 356, 99, 110, 167, 271, 65, 25, 84, 141, 69, 118, 258, 204, 153, 3, 245, 183, 146, 209, 41, 340, 135, 353, 186, 287, 122, 140, 350, 373, 280, 298, 216, 314, 47, 372, 45, 344, 104, 295, 182, 306, 200, 302, 242, 97, 125, 379, 311, 263, 92, 284, 297, 208, 223, 91, 16, 378, 77, 337, 207, 381, 264, 30, 155, 226, 202, 8, 288, 9, 28, 206, 369, 43, 105, 257, 169, 236, 189, 237, 63, 291, 332, 309, 249, 112, 328, 29, 133, 228, 126, 176, 68, 250, 142, 265, 187, 87, 164, 368, 59, 31, 374, 329, 129, 195, 109, 220, 235, 229, 35, 312, 212, 289, 48, 246, 301, 330, 33, 357, 148, 102, 213, 40, 362, 157, 233, 324, 128, 39, 115, 26, 227, 294, 160, 262, 107, 251, 72, 127, 144, 22, 323, 188, 101, 380, 283, 259, 58, 338, 89, 13, 277, 139, 64, 34, 161, 165, 276, 247, 336, 106, 121, 163, 85, 221, 71, 199, 23, 0, 79, 327, 11, 145, 27, 49, 159, 53, 158, 172, 162, 1, 215, 78, 348, 14, 241, 4, 150, 293, 94, 96, 313] + 52: [332, 248, 151, 342, 379, 258, 217, 196, 311, 215, 116, 161, 23, 97, 33, 312, 74, 85, 138, 171, 358, 127, 84, 239, 369, 328, 272, 22, 357, 3, 63, 265, 285, 79, 50, 31, 10, 352, 5, 364, 243, 130, 334, 343, 365, 326, 61, 39, 223, 47, 208, 355, 216, 227, 149, 335, 9, 129, 295, 237, 49, 236, 318, 172, 145, 294, 362, 152, 14, 348, 120, 360, 29, 181, 259, 319, 113, 341, 253, 368, 12, 356, 309, 222, 278, 20, 315, 251, 156, 131, 142, 316, 324, 86, 158, 180, 26, 378, 219, 262, 381, 276, 75, 125, 346, 289, 192, 72, 80, 269, 136, 139, 293, 182, 167, 73, 211, 184, 176, 44, 339, 4, 189, 344, 117, 111, 197, 159, 210, 376, 257, 56, 382, 186, 225, 71, 140, 256, 366, 19, 286, 6, 213, 68, 350, 214, 271, 103, 370, 17, 108, 122, 240, 372, 162, 150, 338, 169, 306, 195, 299, 94, 147, 249, 16, 290, 209, 35, 106, 18, 54, 28, 52, 179, 46, 301, 45, 43, 373, 66, 87, 185, 42, 218, 38, 380, 203, 202, 135, 175, 200, 264, 107, 27, 252, 13, 228, 298, 323, 168, 246, 234, 104, 307, 283, 93, 177, 69, 230, 354, 198, 321, 163, 260, 367, 336, 188, 173, 233, 221, 70, 78, 277, 224, 141, 333, 118, 134, 146, 67, 11, 302, 95, 205, 137, 99, 109, 110, 287, 41, 270, 24, 297, 157, 58, 178, 121, 250, 112, 81, 37, 153, 275, 232, 62, 282, 292, 51, 76, 90, 363, 7, 34, 77, 89, 374, 349, 310, 82, 124, 280, 305, 199, 377, 226, 268, 238, 133, 204, 274, 220, 100, 115, 98, 353, 53, 279, 317, 206, 325, 193, 183, 102, 327, 300, 25, 263, 160, 114, 345, 30, 330, 337, 92, 261, 1, 88, 8, 229, 15, 143, 40, 288, 291, 347, 83, 187, 57, 59, 308, 32, 359, 64, 255, 281, 119, 296, 242, 165, 148, 273, 154, 128, 383, 191, 254, 91, 235, 2, 322, 320, 313, 55, 105, 164, 190, 361, 174, 266, 65, 166, 194, 207, 304, 123, 331, 241, 132, 340, 36, 244, 21, 267, 96, 231, 284, 371, 60, 245, 101, 351, 170, 155, 144, 247, 126, 329, 48, 314, 212, 0, 201, 303, 375] + 53: [308, 199, 350, 311, 136, 338, 70, 4, 196, 44, 335, 182, 346, 232, 5, 333, 360, 134, 219, 165, 368, 357, 214, 299, 273, 64, 233, 10, 246, 154, 192, 91, 197, 30, 104, 228, 251, 282, 303, 142, 34, 130, 224, 103, 98, 369, 222, 32, 47, 54, 159, 290, 327, 68, 276, 315, 101, 257, 53, 337, 234, 245, 58, 88, 31, 364, 263, 50, 258, 89, 137, 102, 131, 62, 380, 186, 348, 57, 185, 90, 316, 277, 138, 215, 286, 61, 106, 140, 342, 272, 264, 43, 113, 181, 289, 377, 367, 254, 110, 238, 247, 95, 175, 149, 157, 112, 164, 243, 132, 332, 86, 293, 261, 320, 329, 353, 180, 318, 170, 291, 194, 78, 63, 295, 317, 331, 306, 208, 92, 79, 195, 324, 35, 345, 21, 168, 207, 143, 158, 111, 227, 8, 326, 29, 176, 352, 212, 122, 206, 287, 28, 285, 27, 242, 370, 17, 179, 117, 42, 323, 204, 174, 148, 33, 312, 41, 59, 99, 105, 218, 220, 355, 74, 365, 256, 259, 366, 349, 252, 82, 22, 359, 343, 248, 307, 314, 141, 96, 249, 56, 84, 87, 126, 52, 127, 173, 152, 129, 76, 241, 268, 379, 15, 65, 340, 383, 374, 275, 73, 304, 100, 319, 371, 283, 69, 363, 213, 128, 231, 14, 341, 40, 60, 166, 297, 16, 202, 0, 236, 229, 119, 72, 271, 262, 221, 144, 274, 300, 235, 381, 183, 145, 12, 24, 325, 309, 269, 83, 351, 139, 13, 36, 230, 217, 120, 294, 153, 184, 361, 358, 260, 37, 305, 281, 382, 123, 321, 71, 48, 1, 171, 310, 301, 93, 167, 210, 376, 80, 298, 223, 49, 7, 177, 344, 267, 265, 188, 135, 121, 280, 189, 347, 198, 172, 66, 23, 200, 3, 38, 118, 239, 51, 250, 151, 203, 146, 46, 125, 226, 75, 336, 133, 107, 330, 266, 313, 284, 292, 237, 160, 26, 356, 201, 372, 187, 178, 150, 55, 156, 81, 11, 162, 279, 362, 2, 225, 255, 302, 288, 296, 18, 169, 9, 25, 39, 94, 124, 85, 116, 191, 97, 240, 20, 216, 373, 77, 209, 155, 67, 190, 378, 19, 161, 109, 6, 253, 322, 375, 354, 163, 211, 193, 45, 147, 328, 108, 270, 115, 278, 244, 334, 114, 339, 205] + 54: [363, 41, 299, 57, 44, 325, 154, 147, 370, 90, 192, 280, 167, 143, 300, 356, 64, 328, 181, 46, 286, 93, 258, 27, 371, 326, 71, 353, 265, 122, 121, 92, 246, 61, 140, 331, 112, 164, 327, 207, 189, 35, 367, 184, 171, 343, 145, 340, 84, 321, 241, 76, 212, 26, 166, 95, 236, 68, 333, 153, 210, 297, 172, 81, 319, 79, 217, 287, 18, 193, 48, 334, 359, 33, 183, 267, 75, 162, 223, 238, 60, 383, 229, 316, 110, 105, 195, 324, 168, 362, 10, 130, 36, 55, 78, 123, 294, 240, 80, 115, 158, 151, 53, 124, 125, 284, 282, 163, 173, 91, 226, 179, 312, 242, 188, 70, 62, 54, 174, 347, 103, 293, 40, 375, 186, 208, 329, 341, 25, 32, 245, 314, 269, 161, 4, 349, 137, 42, 235, 277, 200, 249, 348, 191, 380, 248, 37, 34, 364, 330, 317, 211, 22, 77, 87, 7, 65, 337, 72, 239, 378, 244, 69, 252, 104, 307, 221, 116, 264, 263, 372, 306, 232, 273, 342, 43, 308, 187, 270, 373, 291, 160, 227, 28, 114, 234, 368, 152, 144, 148, 169, 237, 214, 176, 117, 260, 296, 357, 82, 45, 16, 197, 3, 365, 98, 311, 156, 352, 199, 113, 275, 322, 215, 279, 290, 225, 301, 20, 129, 111, 29, 309, 196, 230, 323, 2, 58, 136, 128, 180, 170, 15, 202, 228, 5, 295, 213, 99, 283, 96, 355, 88, 142, 118, 254, 278, 231, 86, 259, 250, 13, 150, 304, 233, 182, 345, 155, 332, 203, 83, 120, 377, 14, 23, 206, 131, 379, 19, 109, 8, 101, 74, 205, 52, 177, 126, 354, 376, 303, 175, 298, 285, 141, 256, 0, 100, 222, 313, 133, 339, 17, 224, 209, 288, 272, 39, 276, 119, 139, 366, 11, 253, 262, 97, 85, 220, 271, 146, 6, 9, 257, 302, 201, 292, 178, 38, 149, 135, 381, 243, 24, 30, 216, 361, 351, 310, 56, 251, 198, 50, 47, 268, 281, 289, 157, 190, 132, 360, 63, 255, 305, 12, 108, 21, 134, 218, 49, 274, 344, 261, 335, 31, 67, 73, 127, 185, 138, 106, 369, 374, 318, 219, 159, 338, 89, 204, 94, 346, 51, 66, 59, 315, 194, 247, 102, 382, 320, 350, 165, 266, 1, 107, 358, 336] + 55: [154, 355, 304, 360, 248, 337, 270, 212, 354, 306, 57, 303, 262, 344, 322, 14, 349, 4, 218, 250, 140, 48, 267, 23, 113, 363, 266, 213, 98, 260, 90, 328, 216, 3, 246, 36, 268, 104, 125, 53, 41, 214, 180, 297, 101, 182, 45, 302, 335, 339, 277, 220, 67, 203, 175, 254, 235, 336, 258, 193, 0, 316, 89, 188, 201, 273, 230, 227, 359, 78, 145, 71, 242, 282, 186, 142, 88, 269, 47, 153, 276, 229, 85, 10, 77, 34, 109, 348, 321, 223, 173, 351, 25, 117, 236, 288, 247, 211, 138, 327, 179, 312, 161, 369, 174, 52, 35, 105, 341, 202, 50, 6, 80, 28, 198, 62, 382, 19, 334, 192, 74, 278, 189, 32, 366, 314, 243, 309, 238, 331, 353, 123, 22, 383, 54, 17, 340, 160, 2, 149, 228, 127, 146, 55, 12, 171, 205, 84, 167, 121, 298, 326, 151, 307, 30, 15, 280, 116, 103, 86, 126, 75, 18, 94, 332, 91, 239, 21, 333, 364, 31, 208, 232, 263, 283, 133, 285, 83, 108, 181, 69, 292, 59, 275, 241, 166, 191, 29, 362, 187, 87, 245, 82, 257, 357, 233, 271, 73, 16, 377, 60, 237, 38, 7, 1, 185, 365, 115, 107, 323, 70, 5, 284, 40, 122, 375, 261, 195, 172, 63, 373, 221, 158, 72, 200, 137, 176, 134, 20, 209, 286, 225, 338, 319, 293, 64, 240, 164, 141, 42, 162, 177, 93, 251, 124, 150, 253, 264, 294, 299, 368, 291, 129, 342, 231, 27, 147, 315, 222, 378, 281, 96, 165, 143, 300, 301, 99, 296, 56, 380, 170, 130, 379, 132, 120, 128, 183, 352, 51, 204, 305, 168, 356, 224, 148, 317, 135, 310, 136, 106, 287, 81, 39, 350, 265, 255, 295, 249, 210, 308, 234, 290, 110, 65, 311, 97, 371, 44, 156, 9, 100, 381, 159, 289, 11, 46, 76, 178, 226, 112, 370, 318, 313, 217, 68, 163, 252, 347, 197, 152, 358, 26, 272, 206, 325, 95, 102, 13, 194, 157, 37, 119, 330, 343, 58, 169, 324, 329, 199, 111, 361, 8, 79, 346, 114, 244, 259, 184, 118, 374, 219, 279, 256, 372, 274, 33, 24, 155, 196, 139, 320, 345, 49, 43, 376, 131, 66, 61, 190, 144, 207, 215, 92, 367] + 56: [321, 240, 156, 204, 9, 126, 154, 368, 251, 89, 83, 238, 324, 267, 144, 99, 215, 383, 23, 331, 82, 244, 284, 116, 74, 158, 201, 107, 236, 193, 289, 305, 380, 314, 111, 323, 290, 91, 224, 325, 365, 369, 248, 333, 319, 56, 5, 71, 336, 15, 122, 40, 282, 233, 67, 228, 344, 143, 159, 135, 355, 66, 378, 155, 312, 218, 176, 178, 115, 182, 3, 65, 257, 165, 85, 95, 77, 24, 43, 68, 136, 192, 124, 55, 382, 320, 239, 247, 151, 276, 25, 37, 50, 61, 90, 103, 53, 101, 342, 0, 181, 160, 299, 134, 338, 356, 21, 104, 148, 377, 343, 12, 361, 79, 29, 341, 123, 139, 315, 316, 186, 88, 52, 297, 140, 60, 220, 242, 269, 362, 149, 259, 198, 196, 232, 359, 141, 335, 185, 47, 8, 189, 379, 357, 349, 188, 175, 351, 332, 381, 372, 235, 153, 306, 350, 373, 352, 273, 46, 73, 227, 348, 1, 237, 367, 221, 265, 51, 78, 260, 206, 345, 2, 254, 255, 280, 31, 129, 86, 293, 358, 105, 110, 234, 145, 256, 92, 132, 302, 108, 109, 142, 226, 163, 327, 191, 138, 184, 207, 6, 281, 150, 245, 114, 295, 42, 303, 219, 33, 339, 328, 27, 363, 72, 317, 310, 283, 48, 225, 102, 261, 347, 253, 197, 147, 113, 376, 203, 230, 301, 18, 268, 64, 311, 169, 128, 194, 329, 208, 205, 272, 309, 318, 243, 69, 80, 59, 49, 171, 38, 13, 195, 250, 164, 222, 252, 63, 57, 217, 20, 35, 120, 271, 258, 246, 26, 286, 313, 340, 76, 45, 274, 170, 296, 127, 326, 360, 200, 152, 262, 173, 133, 112, 180, 364, 146, 202, 287, 75, 294, 11, 322, 187, 44, 166, 374, 81, 241, 162, 100, 212, 209, 337, 231, 10, 278, 117, 292, 210, 39, 106, 97, 84, 172, 177, 62, 334, 168, 28, 93, 96, 300, 174, 304, 275, 199, 279, 167, 14, 264, 30, 130, 34, 121, 308, 4, 353, 266, 249, 98, 119, 16, 298, 223, 291, 183, 161, 17, 125, 277, 32, 36, 213, 330, 19, 190, 94, 137, 354, 7, 375, 157, 214, 371, 346, 263, 229, 131, 87, 54, 22, 58, 216, 285, 179, 307, 270, 41, 70, 118, 211, 370, 288, 366] + 57: [254, 345, 302, 90, 342, 94, 50, 33, 366, 223, 227, 346, 180, 260, 40, 21, 150, 383, 238, 352, 211, 182, 102, 136, 47, 300, 267, 339, 259, 54, 70, 66, 209, 109, 146, 208, 286, 34, 277, 188, 113, 287, 25, 86, 92, 198, 91, 246, 273, 174, 266, 176, 149, 186, 295, 173, 151, 127, 175, 7, 160, 200, 330, 72, 237, 298, 310, 343, 17, 2, 335, 329, 46, 119, 309, 99, 142, 278, 171, 229, 271, 112, 202, 178, 107, 101, 361, 131, 241, 234, 24, 194, 215, 221, 258, 275, 231, 125, 306, 43, 169, 356, 29, 347, 251, 217, 55, 85, 362, 158, 235, 134, 137, 236, 95, 203, 111, 270, 332, 122, 65, 60, 35, 71, 16, 228, 195, 257, 358, 297, 219, 324, 22, 199, 374, 177, 214, 115, 382, 312, 1, 61, 156, 325, 349, 216, 172, 26, 184, 193, 11, 344, 185, 274, 110, 212, 120, 321, 39, 207, 328, 222, 100, 363, 284, 82, 282, 213, 187, 83, 78, 77, 48, 292, 296, 370, 351, 132, 18, 320, 98, 244, 245, 291, 340, 263, 80, 232, 45, 262, 293, 301, 104, 68, 159, 58, 117, 226, 315, 272, 27, 179, 314, 62, 350, 41, 289, 196, 290, 152, 144, 87, 252, 118, 154, 138, 128, 123, 379, 106, 357, 79, 368, 103, 57, 116, 20, 225, 153, 67, 8, 12, 0, 253, 377, 307, 316, 157, 265, 162, 375, 224, 294, 168, 32, 166, 230, 167, 28, 281, 218, 256, 318, 313, 96, 23, 233, 360, 371, 206, 140, 121, 38, 30, 37, 14, 88, 124, 81, 163, 56, 164, 63, 276, 255, 3, 249, 69, 210, 376, 4, 336, 5, 299, 248, 13, 261, 311, 89, 44, 141, 264, 220, 6, 9, 197, 303, 317, 365, 268, 84, 331, 31, 279, 326, 288, 323, 367, 161, 108, 145, 354, 170, 130, 73, 201, 148, 133, 243, 285, 338, 126, 240, 341, 64, 191, 204, 369, 42, 181, 378, 155, 165, 59, 139, 283, 205, 242, 381, 247, 334, 348, 359, 74, 250, 327, 190, 319, 355, 373, 76, 114, 15, 322, 135, 183, 10, 51, 93, 380, 192, 304, 53, 189, 239, 143, 269, 97, 36, 129, 305, 105, 52, 19, 280, 75, 49, 147, 337, 308, 372, 333, 353, 364] + 58: [220, 348, 116, 178, 368, 344, 221, 347, 365, 216, 210, 192, 194, 213, 314, 86, 288, 175, 297, 318, 54, 82, 320, 312, 76, 269, 93, 232, 128, 137, 350, 94, 304, 219, 245, 27, 198, 222, 302, 166, 196, 89, 48, 111, 44, 16, 343, 70, 90, 295, 139, 217, 241, 25, 281, 177, 351, 107, 130, 160, 91, 7, 354, 319, 324, 135, 228, 339, 381, 71, 174, 197, 164, 140, 294, 1, 29, 57, 224, 17, 252, 218, 65, 363, 284, 332, 310, 249, 8, 11, 23, 39, 51, 62, 109, 117, 126, 49, 56, 380, 258, 40, 99, 115, 366, 199, 257, 242, 136, 255, 373, 151, 103, 66, 227, 342, 383, 9, 67, 68, 37, 259, 195, 34, 378, 356, 74, 278, 334, 315, 105, 149, 3, 64, 120, 349, 20, 69, 223, 361, 83, 268, 52, 155, 79, 207, 317, 293, 289, 75, 276, 0, 270, 327, 185, 337, 15, 285, 84, 275, 325, 85, 247, 208, 10, 323, 370, 32, 169, 180, 88, 96, 179, 146, 272, 188, 45, 362, 209, 87, 147, 33, 95, 38, 296, 134, 158, 159, 165, 184, 204, 212, 98, 148, 305, 42, 31, 377, 298, 129, 211, 72, 104, 277, 311, 266, 357, 133, 238, 308, 333, 182, 274, 4, 122, 121, 119, 100, 152, 256, 322, 307, 181, 80, 35, 141, 286, 331, 59, 55, 14, 63, 283, 306, 187, 316, 113, 292, 6, 176, 355, 2, 153, 244, 60, 144, 251, 206, 19, 273, 336, 353, 47, 214, 170, 261, 24, 183, 112, 168, 280, 231, 142, 154, 157, 193, 260, 191, 326, 163, 230, 229, 330, 233, 201, 108, 371, 101, 162, 145, 150, 41, 340, 239, 240, 246, 267, 279, 22, 352, 28, 264, 124, 203, 12, 271, 18, 262, 114, 234, 102, 92, 190, 50, 250, 77, 127, 78, 58, 263, 341, 106, 205, 225, 46, 329, 236, 26, 13, 328, 374, 376, 382, 248, 291, 300, 321, 131, 143, 123, 172, 202, 36, 360, 358, 171, 21, 97, 30, 303, 167, 73, 237, 226, 282, 372, 156, 254, 110, 189, 138, 173, 61, 200, 379, 359, 161, 346, 118, 235, 43, 53, 367, 243, 81, 313, 265, 375, 132, 5, 290, 299, 287, 125, 186, 301, 253, 215, 369, 309, 335, 338, 345, 364] + 59: [288, 364, 59, 23, 274, 212, 258, 231, 266, 236, 224, 353, 377, 371, 113, 178, 115, 339, 378, 52, 202, 150, 91, 346, 260, 315, 36, 180, 187, 213, 314, 259, 262, 43, 372, 251, 107, 366, 312, 195, 298, 114, 307, 345, 174, 163, 222, 373, 3, 124, 65, 223, 38, 47, 352, 344, 234, 358, 317, 206, 84, 166, 102, 64, 216, 191, 147, 360, 263, 29, 96, 269, 280, 348, 83, 101, 293, 144, 276, 318, 14, 201, 249, 322, 215, 341, 253, 205, 31, 155, 4, 15, 27, 32, 67, 71, 75, 151, 97, 158, 300, 28, 148, 232, 182, 226, 184, 143, 278, 172, 159, 37, 95, 304, 53, 383, 175, 169, 60, 106, 250, 11, 70, 140, 285, 243, 76, 319, 248, 12, 120, 292, 246, 332, 183, 25, 185, 24, 26, 199, 194, 13, 306, 283, 61, 305, 20, 359, 130, 221, 48, 82, 146, 282, 19, 17, 121, 272, 382, 177, 370, 237, 116, 68, 5, 105, 77, 340, 367, 323, 176, 108, 336, 74, 168, 129, 2, 125, 153, 167, 119, 110, 165, 230, 302, 351, 173, 90, 111, 117, 171, 189, 327, 379, 81, 44, 164, 245, 320, 324, 329, 21, 34, 181, 295, 196, 86, 291, 338, 270, 197, 316, 290, 7, 331, 149, 252, 45, 241, 254, 350, 78, 356, 369, 209, 69, 57, 325, 265, 30, 160, 365, 16, 56, 161, 41, 103, 100, 257, 239, 233, 204, 281, 138, 35, 380, 362, 289, 85, 354, 39, 79, 337, 286, 145, 55, 333, 122, 88, 33, 247, 349, 328, 66, 287, 299, 242, 273, 132, 92, 303, 54, 208, 87, 368, 72, 179, 326, 228, 238, 49, 271, 128, 135, 190, 210, 218, 235, 296, 186, 46, 137, 73, 334, 203, 284, 10, 294, 42, 363, 240, 297, 94, 170, 198, 62, 256, 342, 109, 112, 330, 313, 376, 127, 214, 200, 162, 118, 142, 381, 98, 141, 374, 219, 131, 18, 347, 93, 311, 309, 279, 136, 152, 50, 343, 229, 133, 51, 63, 40, 275, 123, 0, 9, 255, 89, 104, 1, 8, 301, 277, 139, 6, 308, 261, 227, 80, 134, 157, 335, 192, 220, 267, 156, 264, 22, 126, 193, 217, 188, 225, 58, 321, 207, 211, 310, 244, 154, 355, 99, 357, 268, 361, 375] + 60: [323, 112, 71, 318, 6, 332, 102, 38, 283, 192, 40, 78, 152, 215, 237, 354, 234, 166, 133, 273, 106, 374, 95, 265, 342, 269, 115, 24, 58, 32, 144, 36, 268, 179, 165, 232, 352, 167, 271, 47, 278, 316, 114, 351, 27, 365, 148, 353, 126, 371, 96, 285, 211, 315, 20, 177, 101, 43, 90, 163, 361, 53, 307, 169, 231, 59, 131, 21, 184, 41, 360, 287, 176, 4, 327, 324, 196, 376, 256, 154, 336, 272, 348, 325, 340, 187, 328, 65, 274, 9, 13, 14, 31, 67, 68, 73, 313, 312, 46, 236, 85, 51, 57, 135, 155, 337, 130, 139, 84, 302, 212, 110, 60, 260, 362, 190, 188, 264, 98, 129, 244, 369, 55, 364, 174, 213, 296, 350, 137, 162, 291, 49, 151, 314, 266, 48, 333, 158, 214, 77, 42, 113, 334, 164, 346, 319, 259, 311, 282, 44, 141, 25, 80, 203, 276, 8, 226, 197, 372, 138, 17, 128, 299, 202, 229, 72, 12, 370, 368, 23, 383, 91, 250, 56, 228, 199, 382, 279, 380, 26, 89, 347, 377, 69, 275, 86, 109, 122, 125, 147, 157, 160, 349, 153, 297, 123, 335, 194, 263, 107, 172, 39, 100, 195, 83, 2, 378, 111, 3, 140, 124, 15, 356, 99, 189, 230, 121, 132, 52, 64, 247, 246, 82, 358, 262, 11, 191, 117, 338, 366, 239, 217, 252, 45, 286, 173, 175, 88, 331, 204, 227, 345, 233, 240, 241, 223, 290, 293, 367, 156, 225, 178, 18, 19, 359, 103, 238, 220, 330, 251, 357, 363, 308, 216, 119, 373, 161, 22, 289, 105, 326, 10, 339, 97, 70, 104, 63, 118, 62, 198, 5, 200, 317, 168, 201, 206, 207, 210, 181, 134, 81, 54, 75, 306, 1, 180, 28, 108, 295, 381, 92, 344, 243, 305, 7, 193, 146, 61, 304, 219, 379, 294, 149, 300, 74, 120, 185, 37, 322, 245, 267, 284, 303, 310, 257, 186, 209, 258, 143, 50, 171, 255, 35, 116, 343, 222, 218, 145, 66, 76, 170, 159, 94, 281, 142, 0, 183, 235, 16, 29, 298, 136, 270, 208, 261, 248, 33, 277, 150, 320, 309, 182, 205, 34, 79, 127, 253, 93, 221, 87, 242, 30, 224, 321, 249, 254, 280, 288, 292, 301, 329, 341, 355, 375] + 61: [73, 341, 101, 225, 192, 176, 21, 263, 72, 28, 51, 366, 74, 122, 309, 45, 335, 367, 195, 200, 182, 338, 186, 382, 136, 202, 205, 216, 271, 377, 348, 286, 238, 224, 218, 83, 142, 169, 346, 327, 47, 17, 177, 105, 121, 170, 295, 129, 100, 29, 11, 23, 25, 143, 196, 9, 296, 68, 318, 69, 154, 323, 16, 19, 155, 302, 369, 114, 81, 181, 93, 3, 375, 149, 276, 371, 148, 63, 10, 364, 171, 210, 208, 6, 259, 266, 242, 58, 41, 0, 240, 275, 67, 332, 96, 347, 197, 36, 184, 91, 127, 183, 289, 61, 168, 261, 372, 243, 135, 27, 298, 215, 294, 280, 92, 284, 125, 111, 248, 297, 314, 55, 207, 285, 232, 119, 5, 365, 324, 308, 85, 246, 326, 262, 151, 70, 150, 352, 330, 59, 65, 157, 7, 77, 62, 333, 118, 245, 337, 131, 373, 78, 376, 103, 204, 368, 138, 126, 354, 79, 76, 161, 301, 44, 305, 18, 137, 312, 160, 99, 175, 292, 48, 49, 37, 56, 89, 359, 340, 339, 12, 325, 278, 124, 283, 8, 281, 123, 353, 106, 267, 329, 221, 33, 230, 277, 270, 350, 322, 203, 256, 255, 4, 66, 201, 288, 2, 166, 24, 198, 80, 120, 98, 293, 174, 213, 54, 102, 82, 97, 32, 117, 172, 362, 90, 290, 43, 315, 113, 264, 193, 253, 185, 235, 158, 383, 269, 217, 194, 336, 282, 206, 233, 22, 291, 317, 252, 279, 360, 144, 303, 95, 31, 84, 38, 378, 307, 310, 46, 251, 132, 247, 64, 226, 351, 116, 141, 34, 134, 187, 52, 115, 164, 222, 287, 254, 381, 236, 163, 345, 50, 231, 152, 53, 331, 13, 319, 39, 86, 159, 380, 257, 379, 214, 212, 311, 328, 190, 272, 227, 344, 30, 179, 14, 299, 112, 145, 223, 355, 146, 361, 139, 237, 358, 349, 220, 273, 304, 60, 167, 42, 108, 234, 107, 268, 147, 75, 229, 104, 239, 370, 374, 241, 342, 219, 88, 191, 260, 20, 211, 110, 130, 173, 258, 209, 156, 249, 244, 87, 178, 228, 71, 199, 363, 165, 306, 343, 313, 274, 357, 189, 57, 188, 128, 109, 321, 162, 334, 40, 26, 356, 250, 265, 153, 1, 180, 35, 94, 140, 320, 300, 15, 133, 316] +layer_updates_per_iter: 0 +num_slots: 384 diff --git a/benchmarks/multi_node/srt-slurm-recipes/configs/moe_load_balancer_gen_ep8_slots384.yaml b/benchmarks/multi_node/srt-slurm-recipes/configs/moe_load_balancer_gen_ep8_slots384.yaml new file mode 100644 index 0000000000..4a5c707042 --- /dev/null +++ b/benchmarks/multi_node/srt-slurm-recipes/configs/moe_load_balancer_gen_ep8_slots384.yaml @@ -0,0 +1,65 @@ +initial_global_assignments: + 0: [165, 45, 49, 259, 322, 235, 158, 163, 81, 29, 289, 70, 198, 144, 141, 181, 107, 43, 57, 361, 28, 248, 309, 262, 5, 91, 317, 137, 363, 192, 296, 270, 299, 326, 50, 252, 352, 316, 175, 2, 301, 125, 132, 304, 364, 273, 13, 373, 111, 279, 203, 150, 159, 348, 241, 295, 21, 80, 255, 376, 318, 272, 359, 72, 101, 233, 109, 129, 324, 208, 123, 314, 39, 133, 4, 108, 116, 216, 100, 379, 382, 263, 20, 210, 42, 212, 315, 334, 367, 251, 298, 329, 339, 8, 171, 274, 378, 135, 184, 0, 345, 177, 346, 188, 153, 242, 321, 65, 278, 209, 360, 284, 34, 313, 297, 311, 114, 44, 268, 234, 52, 308, 103, 146, 140, 19, 180, 320, 127, 14, 145, 350, 15, 64, 53, 69, 319, 164, 18, 226, 291, 88, 370, 185, 166, 254, 134, 217, 351, 155, 264, 332, 122, 62, 157, 68, 333, 280, 143, 205, 196, 283, 186, 200, 261, 148, 31, 358, 85, 187, 136, 240, 178, 99, 211, 195, 82, 328, 47, 102, 338, 340, 380, 179, 381, 250, 167, 374, 325, 323, 58, 201, 256, 225, 95, 330, 151, 383, 193, 182, 51, 104, 232, 63, 37, 126, 22, 307, 11, 341, 90, 258, 112, 300, 27, 89, 66, 32, 214, 249, 246, 275, 238, 292, 83, 93, 260, 229, 161, 253, 353, 152, 194, 357, 142, 24, 228, 130, 277, 61, 74, 371, 79, 290, 84, 119, 230, 169, 35, 202, 327, 139, 276, 349, 55, 33, 117, 156, 10, 36, 138, 7, 77, 375, 377, 172, 227, 331, 269, 366, 1, 25, 73, 67, 342, 98, 294, 206, 12, 219, 9, 285, 271, 121, 281, 168, 118, 247, 222, 245, 17, 173, 71, 86, 207, 312, 347, 30, 218, 176, 16, 3, 78, 243, 105, 183, 124, 174, 94, 337, 160, 199, 87, 244, 335, 365, 372, 369, 97, 106, 147, 237, 362, 286, 305, 115, 306, 191, 231, 220, 23, 189, 355, 288, 310, 303, 356, 236, 60, 224, 302, 162, 76, 190, 26, 204, 48, 343, 293, 282, 336, 54, 131, 56, 354, 265, 368, 170, 149, 38, 223, 257, 213, 46, 75, 59, 215, 221, 197, 267, 6, 154, 40, 96, 41, 113, 239, 266, 92, 287, 128, 344, 120, 110] + 1: [163, 177, 198, 292, 251, 18, 196, 378, 366, 328, 73, 153, 351, 195, 9, 32, 266, 285, 187, 261, 143, 282, 264, 202, 231, 189, 164, 238, 338, 326, 19, 33, 186, 51, 352, 346, 344, 77, 357, 220, 340, 217, 132, 16, 144, 28, 336, 265, 319, 169, 182, 225, 1, 80, 152, 40, 179, 41, 110, 271, 185, 273, 145, 173, 317, 355, 197, 194, 214, 176, 203, 239, 61, 98, 7, 305, 2, 20, 175, 136, 324, 11, 97, 8, 232, 314, 130, 246, 188, 373, 361, 45, 276, 339, 345, 15, 365, 72, 127, 82, 31, 106, 50, 21, 270, 123, 105, 248, 383, 243, 287, 71, 234, 212, 162, 379, 52, 53, 306, 376, 60, 205, 362, 204, 364, 17, 156, 68, 36, 284, 96, 181, 240, 103, 83, 297, 160, 207, 252, 343, 349, 341, 363, 327, 42, 91, 167, 178, 380, 118, 43, 241, 5, 75, 300, 244, 25, 46, 275, 86, 245, 301, 84, 92, 223, 116, 69, 360, 95, 76, 121, 259, 370, 107, 115, 62, 290, 26, 104, 113, 54, 119, 369, 331, 193, 209, 124, 155, 307, 354, 112, 368, 201, 382, 67, 272, 81, 44, 291, 329, 30, 210, 58, 56, 24, 59, 303, 247, 78, 274, 166, 142, 114, 93, 289, 278, 236, 298, 122, 330, 65, 286, 184, 154, 35, 230, 311, 268, 226, 333, 375, 372, 367, 221, 128, 322, 117, 257, 199, 255, 174, 277, 347, 134, 141, 308, 263, 131, 6, 325, 294, 299, 224, 320, 211, 260, 216, 99, 288, 109, 219, 228, 381, 342, 147, 237, 140, 170, 139, 318, 229, 165, 48, 293, 227, 55, 12, 49, 148, 309, 90, 151, 66, 374, 337, 157, 267, 100, 22, 158, 377, 111, 200, 126, 149, 254, 39, 0, 63, 250, 283, 29, 269, 242, 281, 74, 218, 280, 4, 47, 358, 171, 101, 102, 313, 222, 161, 332, 295, 321, 87, 315, 13, 302, 262, 356, 279, 371, 183, 253, 208, 64, 258, 304, 312, 215, 137, 180, 3, 120, 235, 85, 150, 168, 192, 70, 334, 23, 233, 138, 37, 89, 125, 146, 108, 335, 213, 206, 88, 38, 133, 256, 79, 348, 249, 14, 296, 57, 172, 350, 94, 323, 353, 27, 190, 129, 316, 135, 10, 191, 159, 359, 310, 34] + 2: [143, 295, 242, 180, 96, 137, 321, 78, 111, 173, 73, 245, 133, 325, 217, 235, 303, 165, 344, 273, 68, 67, 21, 138, 46, 171, 193, 129, 372, 252, 365, 219, 239, 47, 178, 261, 302, 288, 8, 164, 310, 37, 353, 88, 287, 337, 40, 374, 248, 3, 212, 230, 225, 28, 197, 33, 101, 284, 56, 70, 172, 368, 63, 333, 159, 209, 17, 87, 293, 92, 383, 148, 253, 265, 181, 103, 38, 312, 176, 179, 77, 238, 376, 319, 54, 71, 251, 98, 117, 227, 240, 289, 301, 202, 363, 161, 53, 223, 290, 314, 14, 5, 189, 213, 84, 166, 286, 44, 123, 45, 200, 82, 285, 61, 206, 224, 27, 262, 120, 218, 41, 65, 309, 69, 256, 12, 257, 0, 25, 281, 141, 352, 329, 99, 335, 158, 378, 283, 249, 315, 358, 282, 255, 366, 43, 115, 62, 86, 343, 298, 125, 162, 110, 322, 280, 278, 31, 51, 274, 24, 311, 79, 299, 263, 50, 203, 201, 76, 332, 241, 169, 250, 106, 39, 268, 2, 36, 334, 264, 359, 216, 370, 338, 307, 382, 177, 369, 64, 228, 354, 300, 381, 132, 93, 232, 139, 357, 259, 100, 192, 155, 124, 355, 271, 220, 22, 328, 85, 6, 342, 7, 90, 269, 210, 361, 297, 349, 308, 186, 254, 136, 49, 318, 23, 195, 346, 331, 57, 243, 371, 114, 267, 336, 222, 13, 380, 32, 339, 199, 330, 112, 194, 168, 304, 341, 221, 247, 60, 153, 97, 157, 135, 105, 296, 279, 340, 196, 174, 170, 347, 55, 188, 58, 128, 360, 145, 348, 276, 364, 121, 29, 362, 134, 4, 272, 231, 292, 373, 167, 59, 72, 234, 260, 127, 119, 270, 190, 379, 108, 89, 91, 377, 102, 1, 151, 149, 109, 191, 66, 118, 42, 26, 83, 244, 323, 204, 130, 356, 126, 327, 187, 198, 163, 16, 15, 160, 154, 142, 104, 94, 275, 35, 52, 144, 226, 95, 183, 48, 113, 345, 214, 266, 316, 208, 375, 258, 313, 215, 19, 122, 351, 81, 34, 75, 185, 350, 131, 306, 184, 324, 146, 11, 30, 294, 140, 18, 156, 320, 20, 236, 277, 10, 175, 116, 9, 305, 150, 152, 211, 367, 207, 233, 291, 107, 205, 74, 182, 147, 317, 80, 326, 237, 246, 229] + 3: [66, 171, 13, 62, 252, 331, 201, 120, 58, 231, 74, 316, 12, 87, 78, 288, 203, 374, 375, 299, 344, 197, 266, 280, 144, 366, 96, 249, 128, 7, 356, 321, 86, 133, 379, 140, 121, 329, 1, 95, 175, 60, 226, 233, 324, 47, 222, 370, 34, 14, 131, 80, 158, 180, 139, 178, 164, 37, 287, 174, 25, 118, 279, 142, 32, 111, 300, 274, 256, 57, 65, 246, 30, 160, 340, 70, 67, 15, 85, 346, 254, 206, 116, 220, 191, 45, 253, 352, 315, 69, 341, 257, 198, 311, 38, 301, 310, 27, 3, 275, 19, 192, 24, 150, 6, 102, 336, 2, 212, 239, 219, 240, 382, 161, 289, 262, 176, 345, 217, 53, 270, 117, 255, 125, 196, 115, 184, 232, 91, 132, 72, 101, 93, 179, 372, 242, 159, 54, 148, 320, 244, 5, 17, 278, 260, 18, 71, 314, 225, 333, 151, 50, 213, 63, 342, 358, 138, 221, 36, 290, 136, 109, 295, 277, 92, 98, 103, 55, 327, 135, 48, 328, 100, 353, 188, 305, 165, 381, 362, 293, 258, 183, 16, 210, 360, 90, 330, 349, 347, 371, 247, 292, 377, 40, 313, 230, 31, 97, 348, 49, 337, 339, 343, 211, 189, 304, 119, 21, 264, 8, 359, 312, 114, 41, 218, 235, 112, 105, 76, 214, 276, 286, 20, 281, 106, 259, 110, 269, 285, 245, 251, 338, 369, 147, 75, 124, 152, 33, 332, 303, 365, 302, 163, 46, 317, 261, 157, 81, 42, 238, 207, 10, 267, 296, 182, 223, 357, 162, 154, 149, 243, 126, 224, 380, 355, 129, 268, 82, 237, 322, 361, 291, 83, 61, 68, 309, 190, 0, 323, 107, 284, 368, 89, 265, 173, 167, 335, 59, 319, 79, 263, 209, 51, 208, 363, 334, 137, 26, 168, 227, 325, 195, 177, 29, 271, 364, 99, 351, 297, 204, 108, 236, 169, 273, 44, 104, 306, 248, 187, 294, 376, 130, 228, 153, 354, 378, 73, 156, 141, 205, 127, 308, 326, 185, 52, 199, 39, 22, 194, 35, 350, 56, 318, 145, 215, 186, 170, 250, 122, 77, 11, 64, 202, 84, 172, 229, 155, 181, 200, 166, 94, 307, 113, 383, 43, 216, 298, 367, 123, 373, 282, 28, 283, 134, 88, 234, 143, 241, 272, 23, 4, 193, 9, 146] + 4: [343, 148, 375, 259, 228, 257, 302, 345, 274, 76, 200, 361, 44, 312, 251, 35, 278, 276, 290, 133, 62, 379, 261, 64, 313, 94, 284, 39, 306, 121, 26, 180, 304, 201, 355, 96, 115, 353, 55, 368, 190, 285, 154, 2, 242, 120, 182, 277, 331, 142, 37, 24, 239, 105, 143, 253, 155, 41, 275, 357, 160, 8, 198, 187, 38, 335, 264, 189, 330, 169, 149, 229, 70, 240, 370, 220, 349, 303, 175, 249, 334, 40, 286, 126, 97, 163, 162, 366, 224, 301, 174, 20, 67, 336, 332, 351, 3, 319, 254, 12, 219, 88, 5, 136, 47, 329, 113, 77, 364, 101, 333, 22, 110, 283, 244, 0, 166, 72, 185, 341, 216, 232, 158, 288, 66, 52, 346, 122, 170, 118, 71, 213, 311, 203, 316, 247, 30, 245, 363, 227, 119, 272, 58, 282, 271, 226, 152, 124, 350, 172, 45, 241, 13, 197, 139, 318, 196, 27, 28, 280, 369, 179, 324, 243, 53, 356, 297, 323, 46, 262, 354, 84, 138, 267, 78, 103, 291, 147, 111, 255, 205, 378, 362, 191, 238, 293, 326, 337, 192, 321, 63, 305, 315, 95, 117, 18, 300, 16, 376, 308, 36, 377, 325, 61, 372, 57, 83, 217, 73, 260, 207, 358, 42, 168, 360, 352, 132, 269, 383, 25, 310, 92, 50, 230, 29, 327, 211, 223, 10, 186, 374, 279, 173, 134, 248, 89, 382, 17, 79, 90, 214, 15, 273, 340, 258, 193, 19, 6, 86, 59, 167, 246, 151, 235, 43, 49, 7, 82, 141, 183, 116, 307, 98, 93, 14, 108, 69, 100, 137, 292, 176, 234, 157, 140, 210, 31, 127, 215, 48, 112, 91, 202, 11, 212, 195, 225, 338, 107, 209, 23, 194, 34, 222, 320, 281, 171, 348, 56, 347, 4, 32, 314, 218, 344, 161, 177, 159, 99, 85, 65, 114, 359, 75, 125, 80, 135, 367, 309, 263, 184, 51, 181, 237, 109, 130, 81, 129, 380, 1, 265, 373, 236, 270, 208, 231, 104, 296, 371, 87, 188, 199, 250, 9, 150, 165, 342, 298, 145, 106, 365, 339, 204, 68, 317, 153, 54, 221, 252, 256, 33, 60, 74, 131, 322, 328, 178, 294, 206, 295, 146, 289, 268, 156, 381, 21, 123, 164, 144, 102, 266, 299, 233, 128, 287] + 5: [61, 305, 231, 141, 1, 223, 365, 64, 132, 200, 91, 182, 304, 70, 268, 238, 319, 24, 34, 220, 295, 186, 312, 19, 106, 250, 161, 90, 334, 236, 162, 55, 283, 378, 244, 58, 373, 111, 307, 282, 158, 294, 112, 348, 167, 57, 196, 302, 213, 105, 272, 154, 98, 265, 381, 41, 351, 7, 192, 74, 233, 313, 163, 264, 38, 207, 258, 377, 35, 144, 274, 227, 366, 300, 219, 289, 237, 360, 94, 376, 221, 263, 135, 92, 125, 101, 126, 85, 146, 42, 339, 142, 225, 50, 118, 354, 128, 100, 6, 165, 260, 49, 30, 379, 279, 88, 247, 22, 173, 137, 222, 174, 206, 3, 320, 315, 228, 79, 242, 183, 353, 240, 150, 325, 330, 13, 77, 62, 113, 129, 68, 316, 189, 290, 120, 73, 36, 123, 310, 176, 278, 286, 127, 75, 214, 276, 288, 208, 160, 60, 169, 78, 215, 352, 89, 335, 371, 155, 37, 369, 67, 143, 314, 218, 104, 115, 216, 39, 343, 121, 257, 203, 275, 149, 29, 191, 235, 71, 270, 298, 297, 347, 185, 309, 328, 357, 273, 10, 367, 157, 321, 177, 355, 346, 52, 172, 5, 178, 188, 102, 145, 43, 147, 25, 31, 8, 375, 2, 69, 204, 26, 45, 301, 99, 12, 253, 14, 239, 138, 136, 119, 9, 344, 232, 359, 103, 107, 168, 322, 245, 292, 267, 97, 336, 180, 27, 110, 82, 179, 303, 190, 217, 287, 259, 256, 65, 193, 211, 130, 17, 246, 338, 327, 66, 15, 358, 108, 318, 175, 333, 16, 195, 266, 329, 20, 382, 63, 284, 281, 80, 291, 271, 374, 299, 199, 40, 148, 32, 53, 285, 243, 340, 109, 116, 280, 96, 277, 368, 249, 194, 356, 21, 308, 81, 370, 372, 72, 212, 331, 364, 124, 131, 171, 59, 181, 140, 210, 153, 54, 28, 51, 345, 230, 362, 341, 76, 383, 87, 134, 229, 363, 114, 18, 156, 224, 95, 11, 139, 350, 234, 117, 248, 83, 164, 337, 44, 84, 296, 269, 159, 306, 47, 262, 122, 255, 252, 293, 198, 209, 4, 151, 332, 184, 251, 324, 152, 33, 46, 380, 93, 56, 201, 241, 317, 254, 48, 361, 349, 205, 323, 342, 187, 261, 86, 133, 197, 311, 202, 0, 226, 166, 326, 23, 170] + 6: [97, 281, 212, 306, 46, 371, 36, 318, 119, 246, 34, 239, 0, 113, 352, 236, 223, 202, 44, 211, 98, 280, 207, 116, 197, 261, 148, 199, 124, 349, 381, 366, 285, 152, 328, 117, 303, 183, 302, 29, 91, 344, 61, 65, 167, 35, 40, 90, 142, 240, 297, 249, 11, 67, 378, 216, 293, 84, 208, 129, 151, 176, 377, 278, 304, 111, 383, 219, 136, 365, 237, 242, 86, 217, 138, 81, 198, 224, 54, 309, 235, 130, 360, 162, 338, 313, 339, 92, 19, 93, 228, 153, 214, 320, 161, 164, 308, 253, 146, 27, 229, 31, 375, 181, 100, 112, 287, 289, 234, 165, 369, 336, 101, 190, 139, 327, 10, 157, 22, 110, 284, 23, 194, 316, 83, 105, 96, 16, 379, 357, 74, 337, 256, 348, 89, 356, 140, 127, 172, 353, 252, 363, 325, 247, 322, 258, 177, 160, 55, 120, 173, 163, 88, 368, 196, 184, 300, 301, 109, 245, 317, 37, 321, 77, 15, 154, 210, 69, 159, 243, 254, 329, 333, 346, 215, 42, 134, 292, 62, 108, 266, 351, 222, 250, 78, 141, 273, 200, 75, 149, 71, 323, 76, 174, 166, 103, 341, 205, 350, 359, 232, 189, 118, 291, 345, 277, 185, 380, 231, 279, 133, 64, 264, 58, 6, 104, 276, 82, 362, 122, 168, 358, 8, 70, 310, 312, 203, 288, 102, 294, 131, 201, 238, 227, 340, 218, 132, 135, 204, 257, 274, 343, 66, 295, 269, 180, 45, 307, 187, 57, 188, 178, 259, 95, 179, 41, 311, 158, 221, 107, 332, 286, 271, 87, 225, 330, 355, 145, 18, 193, 298, 268, 364, 244, 80, 347, 290, 51, 21, 374, 171, 241, 1, 20, 72, 25, 275, 342, 376, 53, 99, 59, 267, 209, 9, 260, 94, 56, 255, 79, 370, 270, 128, 182, 49, 12, 282, 144, 324, 220, 262, 206, 63, 335, 372, 126, 48, 3, 334, 299, 73, 123, 106, 226, 85, 24, 47, 38, 7, 192, 382, 2, 265, 33, 315, 373, 32, 305, 233, 5, 28, 326, 175, 13, 367, 283, 319, 155, 156, 354, 115, 230, 68, 30, 169, 114, 143, 296, 361, 43, 137, 60, 4, 14, 248, 50, 147, 272, 125, 39, 150, 251, 17, 195, 121, 263, 26, 213, 170, 191, 314, 52, 186, 331] + 7: [327, 265, 25, 272, 133, 271, 378, 328, 27, 73, 164, 248, 349, 288, 325, 208, 219, 191, 264, 9, 311, 204, 32, 178, 335, 121, 353, 373, 146, 68, 153, 79, 151, 287, 295, 1, 312, 3, 63, 198, 346, 12, 347, 154, 279, 110, 202, 364, 7, 229, 201, 157, 239, 46, 99, 329, 61, 281, 313, 267, 4, 31, 360, 284, 255, 62, 300, 214, 189, 245, 237, 107, 200, 86, 226, 323, 196, 291, 93, 203, 269, 106, 112, 72, 123, 39, 381, 159, 95, 66, 165, 138, 376, 236, 135, 257, 274, 142, 103, 162, 361, 342, 118, 212, 370, 302, 294, 82, 262, 23, 148, 235, 210, 377, 344, 167, 368, 109, 130, 5, 83, 44, 134, 301, 40, 261, 101, 351, 318, 166, 169, 218, 254, 379, 124, 315, 359, 150, 172, 127, 355, 30, 160, 50, 49, 375, 340, 369, 108, 28, 71, 188, 0, 94, 324, 100, 217, 119, 84, 250, 70, 170, 213, 132, 206, 26, 136, 190, 293, 102, 152, 310, 161, 8, 22, 345, 126, 320, 363, 69, 85, 111, 252, 228, 242, 304, 197, 143, 34, 326, 371, 42, 292, 41, 18, 341, 258, 187, 13, 97, 244, 131, 183, 47, 289, 285, 2, 319, 356, 21, 90, 241, 234, 140, 20, 180, 211, 58, 51, 53, 232, 227, 87, 52, 366, 35, 209, 194, 88, 173, 297, 334, 246, 45, 205, 54, 282, 240, 365, 60, 175, 64, 105, 163, 336, 176, 139, 15, 174, 181, 14, 215, 278, 17, 270, 296, 81, 224, 330, 333, 259, 16, 92, 19, 220, 380, 141, 56, 251, 309, 38, 193, 184, 216, 286, 316, 10, 367, 277, 78, 266, 57, 147, 331, 156, 223, 348, 171, 182, 263, 382, 298, 308, 260, 253, 48, 104, 114, 11, 113, 74, 168, 337, 374, 383, 177, 158, 98, 321, 89, 358, 129, 322, 6, 305, 306, 283, 247, 149, 120, 37, 222, 33, 207, 96, 231, 317, 128, 195, 230, 290, 144, 122, 179, 91, 357, 275, 192, 343, 362, 238, 350, 280, 354, 77, 256, 249, 307, 125, 29, 55, 339, 117, 221, 372, 243, 24, 314, 185, 186, 137, 273, 67, 155, 233, 65, 116, 225, 115, 268, 75, 36, 59, 80, 43, 303, 299, 332, 352, 199, 76, 145, 276, 338] + 8: [360, 308, 273, 238, 224, 272, 36, 252, 316, 364, 131, 128, 75, 109, 119, 330, 165, 219, 198, 113, 233, 52, 114, 101, 263, 379, 191, 90, 310, 136, 327, 200, 325, 236, 93, 323, 351, 324, 129, 340, 123, 305, 139, 344, 57, 262, 58, 234, 253, 162, 371, 279, 106, 336, 228, 276, 157, 294, 97, 311, 69, 23, 226, 179, 17, 303, 167, 196, 177, 125, 8, 284, 383, 25, 116, 249, 32, 382, 143, 140, 35, 260, 322, 134, 153, 15, 271, 26, 268, 80, 138, 288, 242, 127, 96, 170, 290, 362, 152, 214, 338, 12, 88, 81, 251, 209, 377, 374, 346, 83, 34, 240, 261, 178, 137, 50, 334, 211, 91, 61, 206, 98, 73, 293, 110, 266, 16, 199, 89, 295, 375, 365, 33, 146, 270, 269, 160, 355, 274, 301, 49, 163, 1, 207, 359, 201, 353, 104, 292, 13, 381, 74, 186, 349, 168, 148, 181, 188, 333, 258, 78, 275, 368, 183, 300, 141, 332, 60, 45, 117, 174, 71, 297, 47, 37, 126, 99, 339, 306, 14, 347, 24, 76, 158, 77, 245, 43, 203, 345, 176, 55, 102, 5, 239, 221, 281, 218, 108, 243, 337, 20, 255, 328, 280, 166, 22, 27, 283, 202, 169, 304, 194, 320, 192, 2, 358, 335, 217, 28, 232, 350, 299, 41, 155, 105, 85, 159, 369, 287, 357, 220, 244, 208, 285, 51, 53, 124, 0, 227, 132, 67, 264, 321, 204, 3, 302, 241, 64, 122, 380, 11, 86, 225, 172, 356, 147, 92, 65, 215, 112, 317, 120, 318, 4, 42, 254, 87, 247, 151, 373, 372, 313, 144, 235, 205, 185, 46, 277, 84, 348, 180, 354, 142, 331, 222, 210, 296, 100, 31, 367, 10, 182, 246, 161, 173, 282, 291, 95, 18, 115, 39, 107, 133, 6, 231, 121, 278, 309, 130, 48, 197, 66, 59, 212, 237, 257, 184, 149, 190, 314, 79, 265, 145, 29, 54, 326, 171, 103, 319, 70, 343, 342, 256, 361, 19, 376, 135, 21, 62, 229, 250, 7, 312, 154, 30, 223, 44, 156, 195, 366, 150, 38, 298, 216, 40, 189, 267, 164, 341, 72, 187, 230, 118, 248, 352, 259, 307, 68, 56, 378, 9, 175, 315, 111, 193, 370, 329, 286, 363, 94, 82, 289, 63, 213] + 9: [92, 244, 81, 372, 353, 184, 15, 138, 210, 67, 239, 258, 161, 135, 120, 297, 231, 192, 116, 186, 4, 230, 238, 237, 343, 235, 248, 382, 197, 261, 112, 291, 71, 298, 38, 229, 86, 34, 383, 266, 279, 44, 204, 157, 61, 236, 234, 26, 304, 64, 166, 280, 357, 179, 272, 217, 281, 136, 177, 9, 82, 377, 137, 88, 180, 314, 259, 35, 105, 36, 66, 141, 39, 324, 109, 307, 275, 233, 254, 110, 375, 310, 162, 347, 170, 193, 58, 240, 328, 284, 85, 164, 182, 77, 338, 57, 255, 313, 95, 143, 260, 219, 381, 83, 242, 271, 14, 342, 312, 360, 302, 289, 228, 6, 97, 99, 195, 123, 150, 218, 359, 104, 13, 354, 60, 45, 300, 2, 320, 251, 352, 232, 227, 69, 337, 140, 325, 73, 101, 378, 250, 27, 53, 340, 349, 185, 103, 331, 215, 350, 351, 1, 370, 214, 23, 309, 133, 30, 356, 292, 306, 247, 107, 129, 256, 336, 11, 332, 5, 308, 246, 8, 100, 148, 174, 358, 253, 305, 134, 89, 346, 167, 290, 368, 345, 249, 93, 200, 28, 122, 152, 348, 327, 47, 262, 212, 315, 252, 222, 344, 376, 287, 121, 56, 98, 317, 363, 268, 264, 0, 183, 41, 269, 139, 16, 189, 106, 75, 208, 50, 52, 245, 190, 203, 371, 330, 76, 211, 48, 188, 293, 243, 176, 118, 149, 273, 91, 265, 369, 365, 355, 295, 49, 78, 196, 299, 155, 198, 127, 329, 209, 32, 131, 285, 187, 3, 277, 54, 364, 20, 142, 267, 70, 181, 274, 80, 339, 65, 130, 117, 373, 114, 42, 286, 333, 21, 221, 241, 326, 68, 108, 361, 278, 194, 362, 25, 55, 173, 31, 263, 316, 10, 220, 19, 74, 29, 201, 159, 51, 132, 22, 367, 158, 154, 33, 334, 321, 311, 163, 323, 124, 171, 288, 319, 17, 18, 379, 46, 62, 322, 84, 301, 270, 125, 199, 59, 374, 43, 225, 63, 223, 113, 40, 7, 24, 168, 226, 94, 90, 147, 96, 172, 165, 37, 146, 380, 341, 282, 102, 151, 144, 153, 169, 318, 128, 87, 145, 207, 206, 111, 72, 202, 276, 175, 303, 205, 213, 79, 115, 12, 224, 216, 178, 335, 160, 191, 366, 119, 296, 294, 257, 156, 126, 283] + 10: [319, 310, 137, 325, 309, 73, 1, 263, 241, 196, 308, 91, 293, 259, 342, 360, 212, 223, 145, 90, 321, 21, 81, 329, 20, 338, 383, 36, 247, 193, 123, 343, 307, 350, 100, 173, 303, 168, 165, 334, 157, 344, 63, 14, 89, 253, 68, 369, 5, 146, 268, 289, 331, 102, 134, 179, 351, 330, 211, 67, 272, 363, 374, 148, 306, 149, 155, 103, 214, 288, 311, 339, 256, 37, 230, 162, 12, 174, 239, 185, 282, 96, 159, 222, 355, 4, 158, 94, 273, 30, 84, 277, 160, 166, 358, 336, 300, 164, 192, 48, 167, 225, 170, 161, 40, 182, 201, 213, 234, 368, 186, 208, 249, 285, 250, 0, 72, 296, 219, 9, 197, 41, 51, 71, 184, 317, 50, 183, 65, 299, 80, 187, 373, 35, 200, 118, 172, 352, 152, 52, 238, 176, 295, 283, 320, 121, 301, 181, 337, 2, 144, 54, 153, 210, 304, 58, 353, 252, 356, 204, 189, 280, 266, 233, 46, 3, 122, 335, 26, 346, 15, 258, 64, 275, 323, 261, 226, 364, 139, 206, 86, 17, 6, 34, 83, 207, 156, 242, 110, 236, 29, 297, 365, 24, 31, 294, 108, 279, 79, 195, 178, 114, 177, 154, 115, 130, 240, 377, 190, 376, 382, 132, 33, 129, 232, 85, 27, 357, 379, 25, 109, 318, 45, 313, 298, 113, 209, 62, 372, 119, 217, 16, 203, 281, 333, 202, 270, 381, 70, 366, 194, 265, 18, 246, 221, 126, 101, 22, 78, 66, 237, 269, 7, 243, 345, 274, 98, 38, 218, 128, 198, 107, 105, 106, 314, 112, 74, 97, 278, 354, 140, 362, 370, 244, 169, 302, 111, 147, 224, 133, 276, 44, 347, 227, 28, 43, 23, 324, 264, 151, 216, 93, 141, 367, 57, 215, 171, 138, 99, 248, 380, 312, 348, 284, 77, 231, 61, 32, 116, 87, 56, 75, 315, 378, 327, 267, 340, 39, 254, 163, 175, 220, 131, 287, 127, 305, 322, 245, 53, 104, 191, 143, 10, 188, 82, 349, 55, 180, 286, 255, 262, 69, 92, 8, 117, 19, 124, 47, 76, 11, 136, 49, 316, 271, 359, 199, 229, 135, 341, 60, 142, 59, 328, 371, 42, 125, 332, 95, 13, 257, 326, 375, 235, 205, 292, 251, 88, 120, 361, 150, 260, 228, 291, 290] + 11: [130, 221, 126, 299, 149, 190, 29, 218, 192, 141, 39, 20, 13, 250, 283, 107, 348, 92, 195, 86, 341, 255, 101, 327, 63, 30, 338, 179, 125, 264, 113, 62, 143, 184, 360, 222, 240, 132, 380, 229, 180, 181, 202, 123, 220, 321, 134, 243, 314, 235, 100, 77, 363, 145, 102, 22, 247, 330, 95, 381, 207, 320, 161, 45, 249, 226, 315, 340, 316, 14, 208, 301, 219, 59, 353, 193, 234, 383, 142, 263, 230, 271, 266, 112, 310, 167, 68, 183, 60, 53, 28, 239, 223, 25, 109, 12, 296, 150, 248, 156, 65, 119, 300, 236, 217, 343, 286, 318, 17, 297, 47, 280, 2, 373, 172, 151, 89, 298, 186, 270, 211, 168, 354, 349, 291, 293, 174, 182, 46, 194, 375, 210, 21, 214, 278, 277, 175, 369, 189, 276, 281, 72, 191, 335, 163, 85, 44, 252, 3, 99, 325, 345, 351, 284, 73, 177, 154, 313, 6, 124, 127, 159, 166, 374, 203, 96, 254, 242, 294, 245, 359, 91, 164, 57, 129, 188, 309, 274, 103, 106, 4, 140, 304, 328, 216, 139, 51, 206, 334, 50, 308, 269, 110, 215, 116, 260, 88, 233, 267, 332, 331, 128, 204, 282, 136, 23, 319, 170, 262, 75, 347, 10, 224, 289, 41, 81, 336, 279, 364, 302, 187, 64, 43, 7, 74, 231, 5, 323, 201, 322, 305, 379, 344, 246, 253, 76, 212, 137, 307, 241, 98, 83, 11, 357, 40, 326, 199, 24, 152, 165, 131, 228, 205, 303, 94, 367, 69, 117, 176, 56, 49, 197, 259, 35, 147, 292, 378, 158, 118, 115, 48, 18, 138, 358, 37, 84, 288, 290, 71, 342, 361, 352, 111, 82, 153, 256, 32, 42, 377, 90, 121, 15, 227, 38, 162, 0, 54, 178, 244, 146, 169, 196, 346, 213, 370, 80, 26, 251, 133, 365, 58, 209, 362, 366, 34, 135, 324, 79, 258, 355, 237, 382, 108, 306, 173, 287, 268, 114, 238, 317, 333, 155, 329, 273, 261, 9, 339, 87, 36, 285, 376, 171, 157, 144, 275, 52, 70, 337, 148, 78, 66, 371, 350, 27, 93, 160, 198, 55, 31, 97, 295, 265, 312, 311, 67, 120, 33, 225, 8, 19, 200, 356, 185, 104, 272, 1, 368, 16, 372, 122, 232, 257, 61, 105] + 12: [255, 35, 167, 22, 103, 306, 170, 75, 332, 152, 368, 10, 39, 101, 271, 129, 261, 318, 358, 357, 200, 231, 119, 256, 249, 325, 38, 121, 20, 293, 329, 148, 352, 44, 34, 343, 299, 247, 182, 269, 228, 88, 166, 66, 222, 220, 302, 42, 204, 177, 203, 381, 168, 296, 233, 369, 176, 195, 205, 348, 229, 277, 153, 102, 107, 135, 326, 14, 286, 142, 1, 315, 61, 62, 161, 321, 76, 154, 65, 32, 244, 217, 85, 252, 316, 113, 117, 320, 210, 145, 242, 100, 359, 239, 53, 225, 120, 82, 333, 48, 175, 289, 192, 361, 354, 339, 68, 194, 25, 60, 2, 300, 322, 294, 291, 157, 155, 376, 9, 191, 45, 138, 280, 58, 11, 40, 13, 183, 365, 263, 274, 310, 345, 131, 237, 125, 79, 26, 163, 206, 377, 240, 162, 272, 130, 223, 172, 363, 344, 349, 97, 181, 208, 295, 382, 330, 87, 16, 209, 371, 362, 63, 337, 23, 15, 201, 350, 41, 29, 298, 139, 187, 122, 159, 257, 86, 186, 128, 383, 105, 375, 55, 212, 258, 307, 338, 360, 213, 21, 331, 73, 110, 158, 127, 150, 49, 17, 124, 290, 51, 340, 134, 137, 215, 147, 89, 288, 116, 57, 164, 380, 74, 283, 253, 188, 114, 165, 67, 4, 173, 214, 270, 379, 112, 284, 207, 106, 146, 282, 96, 81, 230, 143, 94, 202, 248, 95, 56, 199, 372, 327, 303, 243, 156, 28, 109, 126, 50, 98, 259, 281, 216, 317, 108, 133, 160, 171, 180, 241, 59, 144, 193, 227, 52, 234, 224, 136, 232, 335, 115, 351, 12, 336, 246, 374, 70, 251, 178, 347, 236, 196, 111, 132, 328, 92, 324, 373, 250, 149, 190, 378, 46, 245, 267, 71, 90, 198, 123, 278, 346, 268, 323, 27, 33, 264, 197, 308, 31, 91, 304, 370, 185, 0, 84, 313, 37, 169, 235, 36, 140, 5, 297, 24, 174, 30, 8, 54, 72, 367, 184, 221, 342, 275, 64, 353, 366, 78, 226, 69, 341, 219, 292, 287, 151, 260, 3, 6, 276, 218, 266, 364, 265, 104, 273, 80, 238, 301, 309, 77, 254, 83, 189, 262, 356, 319, 355, 305, 334, 179, 312, 279, 285, 47, 93, 18, 211, 19, 7, 118, 314, 311, 141, 99, 43] + 13: [170, 274, 3, 41, 276, 330, 366, 370, 159, 176, 184, 31, 202, 143, 320, 6, 207, 355, 141, 145, 74, 333, 243, 221, 105, 161, 326, 84, 296, 50, 250, 72, 115, 150, 103, 138, 346, 101, 28, 278, 293, 236, 47, 351, 314, 126, 192, 175, 108, 23, 30, 77, 86, 135, 100, 310, 11, 306, 118, 58, 75, 273, 309, 67, 178, 300, 79, 179, 382, 361, 151, 177, 164, 303, 267, 379, 220, 305, 325, 308, 270, 217, 287, 104, 233, 383, 117, 63, 90, 181, 269, 354, 120, 277, 140, 155, 232, 328, 238, 57, 96, 231, 254, 197, 88, 171, 279, 295, 369, 356, 246, 292, 373, 378, 219, 237, 144, 283, 374, 129, 52, 8, 331, 153, 174, 257, 348, 71, 154, 234, 213, 214, 185, 167, 284, 212, 152, 224, 272, 368, 160, 66, 33, 230, 18, 149, 12, 194, 265, 282, 55, 102, 338, 162, 323, 227, 364, 275, 261, 158, 208, 22, 10, 43, 239, 225, 93, 183, 380, 34, 163, 106, 357, 268, 59, 113, 358, 13, 124, 119, 182, 372, 336, 352, 258, 347, 341, 156, 82, 193, 315, 316, 195, 14, 260, 81, 0, 201, 110, 17, 199, 46, 131, 45, 16, 289, 294, 281, 334, 65, 147, 62, 25, 262, 166, 327, 222, 125, 89, 68, 345, 92, 245, 187, 123, 19, 313, 190, 205, 85, 226, 60, 264, 20, 317, 148, 255, 247, 350, 78, 87, 114, 280, 9, 169, 21, 342, 271, 142, 298, 35, 198, 112, 297, 91, 229, 299, 210, 375, 321, 26, 291, 253, 256, 76, 241, 288, 248, 136, 259, 244, 133, 360, 73, 235, 353, 285, 157, 252, 203, 99, 251, 332, 200, 322, 165, 324, 7, 80, 329, 189, 318, 24, 172, 209, 134, 186, 109, 116, 111, 188, 69, 40, 363, 2, 42, 168, 240, 228, 196, 359, 139, 15, 223, 36, 337, 56, 242, 263, 311, 70, 38, 5, 365, 83, 4, 343, 191, 128, 97, 349, 302, 367, 206, 27, 32, 44, 362, 312, 137, 39, 51, 95, 340, 335, 304, 307, 64, 49, 376, 54, 266, 122, 98, 211, 339, 344, 107, 121, 146, 29, 37, 48, 286, 319, 127, 381, 53, 94, 377, 130, 61, 249, 180, 1, 215, 173, 371, 132, 290, 218, 301, 216, 204] + 14: [229, 355, 274, 8, 268, 348, 228, 95, 342, 154, 279, 41, 13, 158, 123, 319, 68, 37, 339, 286, 296, 90, 156, 237, 200, 189, 12, 183, 96, 285, 302, 329, 127, 74, 305, 179, 45, 366, 139, 140, 144, 65, 280, 53, 292, 249, 260, 174, 160, 209, 378, 261, 60, 239, 146, 141, 117, 371, 269, 44, 166, 33, 149, 163, 324, 145, 266, 169, 256, 226, 116, 221, 306, 316, 89, 282, 244, 376, 94, 321, 309, 267, 361, 190, 258, 7, 62, 180, 107, 219, 188, 303, 210, 351, 295, 289, 345, 2, 327, 147, 137, 17, 118, 142, 32, 97, 162, 250, 216, 197, 59, 246, 69, 370, 22, 333, 349, 227, 373, 105, 330, 225, 335, 148, 224, 251, 106, 214, 257, 365, 334, 19, 299, 80, 293, 185, 233, 252, 113, 54, 340, 67, 315, 165, 255, 30, 126, 56, 287, 383, 150, 99, 52, 39, 213, 111, 294, 208, 135, 206, 184, 159, 301, 133, 325, 234, 5, 377, 298, 0, 115, 191, 350, 240, 28, 6, 153, 195, 238, 16, 230, 132, 55, 367, 236, 283, 170, 131, 352, 98, 130, 331, 70, 110, 34, 71, 372, 49, 353, 23, 85, 177, 61, 182, 157, 270, 25, 328, 288, 326, 167, 104, 203, 245, 101, 347, 176, 253, 202, 242, 356, 248, 311, 173, 278, 338, 20, 9, 312, 31, 47, 35, 181, 307, 51, 243, 232, 119, 73, 50, 211, 204, 259, 308, 77, 112, 186, 254, 198, 231, 360, 21, 354, 220, 379, 343, 357, 193, 108, 346, 102, 109, 222, 129, 276, 359, 223, 152, 364, 43, 42, 262, 358, 36, 78, 58, 263, 281, 57, 92, 11, 247, 72, 27, 29, 138, 318, 88, 143, 76, 122, 275, 207, 175, 337, 235, 124, 64, 317, 271, 26, 125, 161, 215, 332, 369, 363, 382, 128, 178, 82, 380, 284, 86, 168, 264, 1, 63, 310, 273, 375, 46, 136, 14, 322, 194, 66, 84, 81, 320, 192, 368, 38, 196, 83, 121, 4, 15, 75, 155, 164, 199, 344, 151, 100, 3, 79, 374, 265, 314, 297, 323, 291, 201, 277, 40, 187, 172, 48, 241, 341, 336, 300, 313, 217, 93, 10, 114, 103, 171, 304, 290, 87, 18, 362, 24, 120, 381, 91, 134, 218, 272, 212, 205] + 15: [130, 258, 68, 259, 39, 236, 215, 80, 151, 56, 277, 174, 143, 164, 162, 78, 182, 247, 212, 86, 150, 282, 81, 43, 382, 347, 53, 137, 45, 37, 337, 116, 218, 91, 73, 129, 126, 380, 361, 299, 304, 110, 21, 336, 245, 144, 260, 270, 11, 200, 298, 295, 300, 159, 146, 237, 376, 83, 342, 177, 111, 115, 36, 47, 5, 194, 102, 263, 34, 331, 254, 165, 30, 226, 308, 208, 55, 64, 95, 213, 54, 79, 161, 158, 140, 280, 171, 44, 178, 243, 122, 220, 348, 322, 368, 276, 0, 355, 104, 350, 371, 326, 284, 60, 221, 16, 113, 311, 138, 24, 225, 335, 323, 305, 2, 248, 229, 50, 233, 253, 141, 306, 354, 244, 204, 71, 172, 257, 190, 147, 197, 188, 149, 310, 292, 154, 179, 286, 302, 345, 19, 6, 325, 85, 15, 155, 148, 76, 199, 332, 252, 20, 360, 48, 193, 135, 255, 379, 285, 319, 372, 42, 275, 142, 114, 69, 8, 12, 294, 67, 72, 234, 224, 211, 334, 265, 278, 210, 303, 262, 201, 327, 136, 98, 183, 108, 288, 249, 315, 75, 366, 328, 88, 324, 175, 340, 291, 231, 119, 9, 329, 40, 344, 163, 320, 235, 106, 357, 49, 145, 279, 309, 77, 96, 206, 13, 339, 118, 381, 289, 272, 92, 375, 167, 3, 239, 369, 370, 312, 7, 124, 181, 41, 307, 156, 214, 46, 25, 93, 356, 359, 251, 217, 261, 367, 185, 333, 90, 317, 23, 296, 256, 242, 196, 352, 351, 170, 238, 105, 117, 87, 268, 205, 341, 377, 349, 321, 267, 314, 169, 283, 316, 240, 65, 378, 184, 14, 187, 58, 112, 66, 103, 346, 219, 297, 152, 264, 281, 160, 362, 128, 290, 202, 38, 74, 121, 232, 139, 353, 168, 241, 109, 31, 338, 133, 28, 101, 59, 269, 10, 22, 250, 271, 313, 180, 61, 365, 123, 383, 358, 63, 273, 274, 89, 374, 176, 293, 222, 195, 120, 17, 125, 132, 27, 131, 127, 227, 57, 94, 134, 4, 189, 266, 203, 51, 157, 35, 173, 1, 18, 230, 207, 100, 209, 246, 166, 82, 343, 62, 363, 301, 191, 107, 97, 99, 216, 26, 373, 84, 52, 364, 153, 32, 29, 318, 330, 228, 223, 70, 287, 186, 33, 198, 192] + 16: [134, 118, 330, 185, 49, 342, 302, 383, 187, 235, 123, 294, 306, 2, 248, 73, 58, 153, 219, 356, 42, 301, 96, 188, 252, 200, 102, 333, 343, 109, 207, 363, 81, 373, 258, 371, 241, 61, 243, 63, 40, 254, 326, 361, 10, 320, 156, 249, 15, 303, 67, 331, 86, 318, 78, 283, 189, 270, 212, 65, 365, 307, 99, 21, 56, 380, 227, 70, 379, 9, 4, 106, 29, 336, 214, 337, 93, 105, 201, 62, 14, 128, 113, 110, 256, 138, 251, 355, 74, 329, 327, 362, 53, 94, 366, 257, 286, 44, 68, 125, 338, 289, 250, 298, 287, 87, 347, 285, 310, 97, 37, 103, 281, 311, 8, 167, 36, 160, 370, 124, 228, 358, 211, 242, 83, 378, 240, 163, 88, 284, 131, 117, 279, 210, 260, 6, 349, 136, 192, 204, 133, 111, 368, 353, 120, 7, 269, 11, 154, 129, 5, 374, 255, 213, 146, 346, 27, 314, 115, 38, 119, 139, 282, 34, 195, 45, 19, 339, 104, 264, 158, 18, 95, 272, 55, 193, 172, 127, 324, 168, 170, 359, 230, 288, 79, 351, 173, 197, 222, 161, 126, 1, 275, 92, 64, 271, 300, 143, 259, 224, 265, 141, 367, 16, 89, 321, 237, 51, 175, 155, 31, 76, 220, 122, 174, 238, 225, 354, 208, 54, 178, 304, 190, 266, 186, 157, 47, 261, 116, 50, 332, 169, 382, 130, 341, 72, 278, 191, 247, 98, 100, 262, 165, 280, 277, 144, 348, 183, 171, 364, 246, 180, 108, 177, 328, 377, 292, 159, 231, 182, 232, 334, 276, 22, 317, 151, 340, 313, 253, 267, 244, 30, 381, 166, 107, 20, 216, 77, 149, 352, 164, 12, 350, 179, 296, 345, 309, 344, 140, 234, 43, 162, 114, 90, 205, 35, 24, 295, 236, 199, 85, 84, 59, 316, 82, 0, 41, 184, 229, 202, 293, 322, 198, 221, 25, 57, 206, 319, 48, 142, 194, 233, 145, 268, 308, 176, 150, 33, 28, 112, 299, 263, 325, 13, 215, 3, 369, 152, 147, 75, 312, 273, 203, 274, 209, 121, 46, 226, 181, 52, 71, 335, 80, 66, 39, 305, 357, 372, 137, 297, 290, 375, 132, 60, 223, 323, 91, 196, 360, 315, 218, 17, 26, 217, 245, 101, 32, 23, 135, 291, 376, 69, 239, 148] + 17: [131, 383, 374, 226, 87, 311, 185, 113, 351, 6, 52, 96, 22, 97, 180, 98, 272, 165, 171, 332, 19, 116, 41, 363, 382, 89, 271, 379, 93, 244, 345, 48, 55, 326, 233, 163, 315, 378, 30, 66, 291, 334, 268, 301, 54, 69, 72, 121, 119, 15, 28, 137, 366, 136, 343, 114, 328, 234, 167, 339, 218, 145, 243, 10, 298, 282, 245, 191, 248, 173, 260, 204, 196, 186, 95, 360, 195, 310, 16, 112, 278, 364, 150, 164, 316, 23, 141, 257, 11, 285, 17, 281, 169, 152, 159, 170, 284, 200, 362, 208, 126, 78, 279, 266, 189, 175, 172, 39, 194, 381, 228, 103, 33, 214, 142, 259, 20, 45, 42, 49, 198, 341, 21, 94, 300, 102, 183, 217, 369, 76, 270, 32, 355, 149, 176, 349, 129, 306, 35, 321, 14, 122, 202, 203, 236, 108, 305, 138, 346, 219, 359, 5, 246, 347, 370, 222, 104, 199, 177, 313, 143, 84, 327, 168, 264, 13, 36, 336, 118, 221, 309, 181, 27, 240, 120, 329, 287, 372, 25, 318, 53, 83, 88, 201, 4, 368, 348, 322, 333, 86, 127, 235, 79, 303, 330, 307, 190, 254, 193, 197, 323, 133, 75, 8, 157, 73, 148, 211, 367, 139, 146, 162, 376, 166, 331, 147, 216, 377, 101, 338, 44, 238, 361, 85, 64, 308, 255, 350, 65, 132, 182, 109, 223, 178, 247, 51, 156, 123, 237, 251, 337, 188, 294, 80, 58, 91, 117, 232, 130, 29, 297, 56, 207, 335, 206, 273, 92, 135, 263, 70, 18, 61, 59, 269, 81, 187, 3, 342, 179, 249, 258, 161, 267, 158, 124, 31, 344, 352, 40, 230, 184, 242, 289, 111, 209, 174, 283, 312, 375, 250, 26, 105, 319, 357, 225, 275, 1, 324, 276, 290, 134, 296, 231, 380, 371, 256, 74, 9, 340, 47, 60, 7, 154, 365, 37, 253, 265, 262, 299, 210, 128, 106, 192, 63, 57, 153, 227, 277, 224, 160, 71, 353, 252, 293, 320, 325, 261, 220, 100, 212, 140, 12, 155, 286, 2, 125, 62, 107, 317, 46, 24, 38, 373, 99, 292, 314, 82, 304, 43, 215, 295, 115, 205, 213, 110, 302, 90, 239, 151, 274, 67, 50, 144, 241, 280, 356, 229, 288, 77, 0, 68, 34, 358, 354] + 18: [271, 169, 136, 26, 31, 144, 285, 3, 165, 46, 366, 73, 359, 233, 109, 22, 201, 50, 8, 176, 150, 9, 335, 329, 243, 179, 348, 82, 220, 311, 209, 76, 95, 354, 238, 294, 249, 290, 62, 198, 226, 222, 344, 1, 32, 59, 78, 147, 30, 286, 215, 110, 236, 68, 237, 297, 99, 326, 188, 274, 346, 339, 177, 149, 131, 0, 278, 58, 157, 349, 279, 81, 63, 267, 153, 325, 256, 175, 332, 259, 197, 375, 364, 86, 44, 352, 230, 18, 199, 323, 186, 80, 227, 382, 309, 340, 251, 65, 185, 193, 211, 347, 380, 189, 321, 306, 282, 266, 67, 70, 89, 41, 342, 83, 87, 334, 367, 232, 250, 235, 308, 205, 276, 132, 363, 148, 324, 127, 383, 158, 66, 224, 381, 2, 107, 85, 29, 377, 277, 336, 196, 353, 97, 242, 208, 245, 106, 356, 210, 154, 119, 116, 355, 376, 284, 330, 33, 124, 269, 371, 202, 331, 79, 225, 137, 7, 328, 289, 15, 125, 244, 12, 13, 351, 112, 108, 60, 216, 4, 56, 229, 312, 172, 90, 184, 14, 117, 72, 134, 379, 120, 268, 47, 300, 138, 260, 53, 28, 36, 174, 146, 139, 151, 35, 190, 98, 181, 20, 141, 283, 262, 88, 162, 288, 313, 102, 140, 178, 93, 145, 187, 94, 214, 213, 234, 338, 51, 126, 317, 75, 258, 115, 273, 24, 160, 173, 194, 49, 327, 293, 10, 257, 228, 272, 45, 315, 304, 142, 167, 34, 357, 341, 105, 103, 19, 365, 23, 307, 223, 263, 241, 350, 361, 39, 195, 38, 96, 182, 292, 270, 166, 303, 143, 170, 219, 130, 369, 180, 372, 161, 280, 345, 212, 206, 221, 55, 374, 314, 43, 217, 71, 118, 16, 207, 368, 192, 25, 360, 291, 378, 77, 204, 318, 337, 191, 104, 343, 129, 135, 159, 302, 152, 111, 264, 362, 40, 155, 287, 254, 48, 358, 64, 27, 17, 123, 218, 42, 370, 281, 5, 305, 252, 295, 91, 52, 156, 69, 320, 57, 6, 333, 113, 114, 239, 301, 373, 253, 246, 101, 240, 164, 171, 248, 121, 261, 316, 296, 122, 231, 61, 203, 54, 319, 265, 255, 322, 92, 275, 168, 200, 247, 163, 133, 298, 84, 37, 299, 100, 11, 21, 310, 128, 74, 183] + 19: [24, 207, 243, 302, 188, 219, 184, 218, 227, 159, 35, 158, 54, 71, 278, 173, 68, 251, 204, 2, 277, 273, 346, 237, 131, 75, 280, 146, 326, 212, 22, 186, 340, 351, 103, 112, 267, 39, 224, 86, 56, 226, 55, 142, 378, 355, 369, 375, 187, 313, 307, 111, 52, 183, 300, 323, 38, 97, 275, 58, 25, 335, 1, 134, 6, 76, 368, 257, 347, 215, 203, 18, 333, 202, 160, 3, 191, 383, 311, 32, 232, 174, 63, 37, 150, 269, 214, 252, 163, 236, 282, 78, 145, 93, 50, 81, 190, 330, 240, 206, 241, 322, 114, 363, 164, 271, 153, 264, 171, 238, 30, 295, 127, 172, 16, 272, 67, 345, 374, 125, 284, 262, 293, 26, 309, 242, 298, 87, 258, 235, 94, 59, 231, 289, 223, 304, 266, 248, 360, 104, 175, 109, 98, 107, 366, 338, 64, 179, 91, 126, 197, 328, 349, 77, 354, 44, 292, 122, 13, 222, 359, 83, 195, 138, 40, 31, 95, 287, 108, 380, 372, 62, 140, 329, 82, 139, 370, 247, 149, 73, 348, 123, 178, 367, 0, 5, 151, 72, 196, 229, 133, 198, 7, 120, 101, 339, 364, 291, 8, 113, 20, 303, 301, 217, 147, 135, 36, 166, 165, 96, 353, 221, 260, 249, 143, 84, 19, 23, 356, 65, 225, 362, 137, 209, 14, 208, 286, 294, 357, 162, 185, 21, 155, 261, 17, 199, 250, 305, 245, 253, 90, 377, 312, 211, 61, 161, 192, 66, 154, 296, 230, 189, 365, 15, 233, 352, 182, 167, 29, 283, 144, 4, 244, 325, 177, 45, 148, 47, 281, 119, 130, 168, 132, 234, 314, 315, 106, 11, 201, 51, 205, 308, 43, 220, 274, 317, 254, 263, 288, 57, 42, 141, 74, 255, 318, 373, 193, 334, 152, 79, 46, 246, 116, 310, 337, 270, 156, 239, 157, 110, 306, 336, 213, 10, 331, 129, 376, 321, 176, 320, 181, 332, 324, 361, 118, 124, 290, 100, 299, 379, 69, 327, 276, 350, 268, 319, 256, 265, 180, 115, 48, 70, 279, 216, 27, 33, 89, 117, 9, 41, 53, 285, 128, 228, 121, 49, 170, 297, 259, 342, 194, 85, 80, 60, 92, 88, 200, 341, 343, 99, 105, 28, 371, 381, 210, 358, 136, 344, 102, 169, 382, 316, 12, 34] + 20: [161, 174, 123, 307, 204, 330, 10, 273, 382, 140, 292, 92, 71, 322, 240, 35, 375, 314, 58, 18, 22, 86, 169, 15, 33, 73, 202, 89, 351, 210, 151, 115, 124, 329, 47, 136, 48, 234, 147, 103, 31, 298, 242, 27, 51, 52, 54, 61, 116, 4, 272, 287, 291, 32, 162, 164, 290, 96, 259, 258, 172, 126, 315, 194, 348, 26, 30, 359, 42, 256, 165, 246, 20, 78, 304, 231, 191, 94, 154, 156, 250, 321, 333, 67, 211, 64, 261, 149, 129, 152, 1, 197, 76, 107, 137, 167, 334, 87, 335, 14, 376, 130, 62, 371, 324, 128, 187, 342, 347, 65, 74, 284, 218, 361, 368, 213, 372, 238, 340, 294, 338, 106, 365, 312, 212, 159, 217, 352, 283, 28, 356, 72, 225, 133, 293, 192, 186, 155, 38, 269, 168, 179, 181, 189, 98, 99, 145, 37, 173, 112, 353, 188, 148, 141, 311, 362, 216, 101, 358, 357, 177, 328, 41, 36, 150, 208, 34, 166, 370, 310, 252, 39, 3, 374, 254, 316, 59, 199, 40, 7, 271, 16, 63, 373, 220, 222, 203, 44, 288, 200, 206, 214, 153, 193, 268, 122, 110, 226, 363, 185, 209, 229, 381, 180, 286, 49, 121, 6, 364, 235, 175, 146, 367, 119, 114, 60, 248, 377, 236, 257, 326, 337, 308, 56, 349, 21, 296, 163, 355, 19, 157, 383, 251, 275, 237, 69, 17, 249, 262, 263, 278, 66, 45, 8, 81, 2, 105, 138, 325, 111, 125, 264, 227, 132, 77, 90, 176, 343, 118, 0, 233, 300, 274, 346, 297, 29, 127, 170, 201, 24, 253, 285, 142, 289, 113, 85, 323, 305, 134, 68, 245, 301, 244, 109, 117, 260, 266, 281, 302, 144, 369, 282, 55, 339, 224, 270, 158, 91, 221, 50, 160, 184, 182, 239, 57, 267, 219, 25, 247, 178, 131, 215, 345, 12, 100, 332, 327, 84, 75, 80, 366, 120, 319, 205, 341, 83, 207, 108, 295, 306, 255, 143, 198, 277, 299, 303, 336, 82, 43, 46, 317, 379, 195, 318, 93, 228, 95, 9, 135, 320, 104, 190, 13, 378, 265, 53, 309, 279, 196, 243, 97, 5, 232, 380, 360, 223, 230, 139, 11, 79, 88, 102, 354, 276, 313, 183, 70, 23, 344, 171, 241, 280, 331, 350] + 21: [360, 80, 302, 206, 210, 364, 88, 345, 0, 240, 16, 26, 366, 69, 9, 189, 234, 325, 197, 336, 362, 318, 62, 286, 165, 30, 65, 301, 14, 102, 258, 335, 333, 305, 105, 342, 207, 130, 85, 37, 176, 6, 326, 95, 235, 311, 10, 17, 152, 158, 140, 247, 82, 208, 94, 377, 182, 320, 22, 349, 299, 280, 43, 23, 245, 131, 84, 18, 259, 262, 97, 303, 125, 378, 40, 100, 136, 104, 346, 48, 244, 334, 163, 241, 143, 41, 76, 56, 249, 106, 7, 116, 248, 327, 35, 58, 355, 4, 113, 256, 53, 185, 199, 232, 252, 250, 172, 351, 219, 227, 144, 220, 368, 229, 168, 1, 64, 223, 260, 159, 370, 5, 77, 193, 160, 198, 146, 276, 273, 381, 181, 253, 156, 74, 129, 180, 255, 31, 161, 166, 322, 332, 93, 123, 47, 254, 71, 236, 38, 218, 348, 214, 118, 149, 307, 147, 15, 194, 230, 111, 183, 243, 63, 49, 90, 309, 312, 28, 317, 323, 204, 171, 187, 170, 340, 300, 379, 110, 195, 164, 70, 330, 217, 314, 296, 142, 278, 188, 343, 11, 42, 264, 173, 308, 257, 190, 50, 112, 117, 277, 178, 238, 380, 19, 196, 225, 135, 221, 33, 174, 73, 267, 138, 60, 98, 192, 354, 133, 237, 148, 137, 203, 329, 216, 81, 83, 319, 294, 75, 13, 68, 114, 328, 145, 298, 212, 101, 127, 44, 306, 281, 371, 119, 46, 86, 87, 169, 226, 284, 51, 191, 128, 8, 25, 313, 141, 288, 270, 338, 331, 39, 304, 66, 383, 290, 154, 275, 266, 292, 269, 57, 261, 213, 134, 12, 315, 239, 374, 99, 324, 202, 242, 32, 222, 107, 167, 108, 321, 132, 20, 376, 153, 29, 92, 361, 120, 150, 279, 184, 109, 121, 293, 209, 367, 373, 89, 372, 358, 287, 246, 21, 356, 155, 3, 295, 341, 337, 24, 274, 126, 157, 27, 67, 382, 268, 2, 357, 54, 162, 265, 59, 231, 224, 283, 179, 339, 103, 316, 124, 289, 205, 200, 363, 45, 91, 177, 151, 365, 175, 344, 52, 72, 78, 233, 263, 352, 359, 139, 251, 291, 211, 347, 353, 115, 34, 79, 186, 36, 215, 271, 96, 310, 201, 122, 55, 375, 228, 285, 61, 282, 272, 297, 369, 350] + 22: [254, 376, 198, 34, 242, 112, 44, 355, 252, 70, 188, 111, 8, 222, 125, 170, 361, 366, 220, 233, 133, 367, 305, 200, 54, 256, 81, 300, 96, 353, 265, 246, 137, 282, 62, 257, 302, 150, 370, 304, 114, 270, 231, 10, 205, 2, 28, 79, 141, 224, 94, 126, 207, 184, 263, 244, 130, 348, 345, 311, 67, 83, 60, 185, 14, 3, 48, 25, 71, 12, 320, 318, 322, 283, 373, 241, 97, 136, 26, 103, 119, 182, 30, 91, 342, 344, 223, 6, 21, 146, 293, 234, 135, 249, 95, 101, 181, 24, 178, 204, 332, 73, 37, 329, 61, 55, 272, 218, 100, 378, 174, 193, 122, 228, 53, 258, 15, 99, 72, 47, 65, 189, 238, 45, 13, 271, 46, 208, 274, 151, 334, 129, 350, 128, 212, 88, 43, 158, 107, 243, 142, 280, 143, 154, 221, 148, 20, 33, 330, 115, 230, 235, 362, 317, 229, 149, 306, 161, 123, 214, 27, 113, 156, 49, 374, 210, 380, 87, 301, 199, 327, 299, 138, 314, 379, 262, 35, 160, 92, 145, 16, 168, 354, 162, 197, 163, 121, 368, 192, 287, 157, 217, 260, 209, 110, 9, 132, 164, 177, 139, 383, 240, 351, 338, 336, 68, 106, 116, 349, 358, 339, 191, 309, 165, 105, 248, 303, 269, 78, 32, 268, 202, 364, 279, 85, 187, 120, 152, 64, 69, 255, 23, 140, 277, 166, 56, 297, 289, 247, 250, 261, 278, 183, 371, 276, 38, 144, 29, 117, 352, 357, 7, 80, 372, 312, 369, 226, 175, 109, 18, 321, 59, 1, 39, 98, 227, 335, 382, 211, 215, 356, 298, 102, 219, 196, 179, 291, 90, 296, 326, 284, 295, 167, 86, 313, 292, 253, 267, 328, 343, 288, 316, 147, 42, 4, 169, 58, 333, 381, 285, 375, 195, 264, 17, 57, 75, 340, 63, 324, 225, 319, 341, 236, 124, 377, 180, 290, 77, 273, 176, 108, 266, 294, 190, 19, 104, 308, 5, 127, 66, 172, 194, 315, 323, 307, 310, 281, 216, 337, 51, 331, 201, 74, 118, 93, 50, 153, 251, 173, 76, 365, 259, 206, 347, 82, 40, 131, 41, 239, 159, 155, 22, 11, 0, 286, 89, 275, 237, 232, 186, 52, 36, 134, 171, 31, 363, 213, 84, 245, 203, 325, 360, 346, 359] + 23: [26, 135, 376, 19, 240, 324, 47, 374, 127, 148, 92, 340, 80, 70, 233, 23, 228, 292, 210, 298, 329, 231, 333, 223, 284, 258, 344, 164, 16, 14, 297, 239, 369, 214, 161, 9, 62, 165, 171, 299, 345, 89, 145, 186, 234, 189, 37, 64, 314, 167, 177, 211, 331, 203, 287, 94, 11, 218, 315, 263, 35, 213, 220, 149, 10, 290, 129, 157, 119, 66, 5, 307, 316, 76, 73, 200, 174, 68, 155, 236, 115, 104, 248, 61, 357, 31, 377, 343, 30, 117, 142, 380, 3, 216, 168, 288, 124, 187, 72, 274, 170, 24, 197, 154, 192, 182, 86, 41, 283, 326, 249, 191, 313, 224, 40, 222, 150, 96, 125, 178, 347, 352, 58, 363, 302, 206, 121, 349, 338, 139, 267, 46, 202, 34, 383, 181, 364, 42, 278, 198, 60, 366, 43, 81, 172, 132, 244, 281, 201, 269, 358, 176, 180, 59, 2, 56, 133, 146, 378, 91, 317, 237, 311, 356, 153, 160, 65, 301, 330, 250, 143, 109, 335, 212, 354, 362, 25, 375, 106, 188, 319, 88, 266, 116, 138, 208, 83, 217, 296, 4, 15, 242, 275, 100, 323, 120, 147, 82, 327, 261, 67, 372, 351, 130, 190, 144, 102, 312, 152, 272, 136, 361, 370, 17, 52, 325, 341, 204, 348, 280, 107, 7, 134, 99, 285, 355, 79, 367, 353, 230, 322, 247, 20, 141, 183, 293, 13, 251, 8, 235, 71, 175, 300, 225, 295, 87, 103, 156, 84, 55, 6, 371, 209, 50, 74, 36, 195, 342, 221, 44, 32, 365, 53, 137, 162, 193, 45, 0, 245, 108, 114, 243, 336, 373, 205, 49, 253, 276, 337, 334, 22, 318, 246, 112, 166, 29, 291, 265, 305, 264, 252, 69, 77, 173, 12, 232, 304, 57, 159, 78, 309, 111, 184, 229, 95, 194, 255, 101, 1, 93, 98, 207, 382, 196, 54, 128, 256, 21, 163, 268, 97, 33, 308, 140, 310, 277, 350, 259, 118, 289, 105, 262, 18, 110, 39, 286, 126, 328, 85, 51, 48, 306, 279, 27, 241, 169, 270, 257, 131, 379, 219, 151, 271, 38, 215, 359, 185, 254, 273, 179, 321, 303, 90, 339, 28, 346, 122, 294, 123, 227, 260, 282, 158, 368, 238, 360, 381, 63, 199, 332, 226, 113, 75, 320] + 24: [154, 357, 290, 172, 360, 112, 334, 186, 283, 159, 354, 91, 226, 274, 356, 49, 380, 3, 206, 63, 169, 295, 116, 11, 239, 60, 346, 282, 271, 296, 76, 161, 281, 160, 171, 291, 25, 18, 187, 240, 165, 316, 208, 364, 36, 374, 74, 81, 265, 263, 87, 259, 28, 286, 255, 230, 53, 135, 277, 382, 273, 260, 377, 39, 345, 118, 221, 321, 235, 323, 313, 280, 65, 225, 37, 170, 348, 10, 363, 320, 57, 331, 217, 317, 101, 68, 247, 250, 167, 340, 214, 17, 152, 133, 115, 166, 252, 372, 97, 210, 381, 64, 301, 207, 26, 204, 192, 15, 41, 106, 138, 336, 224, 307, 58, 297, 84, 168, 242, 315, 194, 30, 103, 4, 38, 14, 173, 249, 373, 163, 262, 342, 180, 184, 378, 300, 199, 347, 261, 40, 219, 158, 198, 241, 9, 22, 85, 328, 139, 361, 104, 375, 343, 78, 195, 306, 318, 254, 350, 96, 182, 12, 287, 83, 257, 233, 222, 56, 302, 134, 218, 203, 79, 88, 86, 188, 8, 148, 209, 44, 109, 236, 43, 174, 141, 123, 349, 82, 358, 179, 264, 298, 246, 6, 189, 111, 337, 324, 294, 146, 237, 24, 164, 190, 71, 355, 113, 149, 145, 245, 279, 376, 153, 269, 47, 51, 66, 181, 258, 267, 176, 120, 107, 284, 42, 67, 329, 238, 132, 256, 143, 228, 90, 227, 371, 100, 2, 21, 232, 314, 20, 92, 128, 110, 185, 27, 266, 62, 231, 213, 144, 61, 325, 308, 46, 351, 293, 77, 48, 59, 147, 278, 197, 1, 292, 215, 335, 333, 303, 150, 175, 94, 352, 359, 50, 234, 362, 367, 98, 162, 124, 285, 33, 305, 45, 127, 251, 353, 7, 52, 369, 95, 157, 105, 220, 370, 137, 202, 35, 54, 299, 131, 142, 177, 338, 205, 272, 140, 178, 13, 304, 244, 339, 270, 365, 72, 276, 196, 212, 126, 99, 191, 102, 193, 183, 80, 201, 332, 200, 243, 69, 322, 89, 129, 327, 379, 223, 0, 70, 211, 122, 121, 5, 29, 319, 31, 344, 366, 93, 156, 130, 73, 341, 310, 114, 326, 216, 16, 311, 268, 312, 108, 309, 275, 23, 253, 32, 151, 136, 19, 55, 288, 248, 125, 229, 75, 119, 289, 117, 330, 34, 155, 368, 383] + 25: [315, 30, 309, 77, 145, 305, 32, 120, 287, 215, 84, 240, 89, 343, 135, 359, 369, 304, 81, 130, 184, 202, 133, 14, 105, 300, 361, 127, 248, 22, 34, 122, 96, 293, 118, 349, 1, 286, 88, 104, 148, 106, 338, 233, 263, 123, 91, 158, 269, 168, 101, 2, 246, 232, 273, 102, 230, 342, 294, 197, 231, 153, 60, 97, 4, 291, 336, 237, 312, 259, 37, 28, 181, 355, 212, 251, 193, 260, 51, 281, 362, 283, 208, 289, 322, 265, 119, 172, 217, 272, 241, 194, 43, 19, 277, 326, 379, 192, 268, 375, 25, 376, 333, 7, 296, 378, 100, 131, 373, 76, 244, 146, 161, 143, 225, 319, 199, 345, 185, 328, 201, 94, 11, 356, 74, 166, 186, 177, 157, 21, 45, 40, 128, 137, 95, 57, 26, 301, 50, 329, 382, 239, 267, 178, 282, 372, 62, 298, 78, 0, 112, 5, 8, 318, 351, 381, 252, 377, 229, 54, 126, 218, 196, 347, 132, 221, 354, 290, 297, 257, 69, 370, 53, 27, 179, 271, 35, 325, 70, 210, 46, 236, 142, 63, 264, 71, 108, 198, 13, 270, 156, 220, 72, 23, 284, 258, 85, 39, 113, 49, 160, 38, 59, 262, 346, 9, 56, 256, 367, 321, 348, 242, 20, 203, 68, 55, 357, 331, 58, 310, 31, 200, 17, 358, 109, 163, 86, 124, 226, 175, 245, 155, 3, 147, 12, 285, 182, 6, 44, 121, 139, 276, 107, 98, 299, 61, 327, 10, 280, 66, 216, 18, 154, 222, 341, 80, 366, 279, 261, 140, 211, 295, 350, 204, 308, 134, 254, 144, 24, 79, 223, 243, 337, 75, 36, 167, 364, 371, 64, 41, 205, 360, 42, 90, 266, 170, 255, 165, 228, 180, 29, 83, 334, 162, 152, 171, 190, 33, 314, 368, 302, 234, 209, 99, 138, 227, 307, 114, 191, 278, 316, 324, 330, 365, 339, 149, 67, 238, 249, 275, 111, 292, 250, 183, 87, 311, 174, 224, 48, 141, 335, 169, 288, 151, 195, 129, 247, 317, 214, 65, 82, 332, 52, 73, 235, 313, 380, 207, 136, 306, 253, 125, 323, 164, 176, 103, 115, 352, 187, 383, 15, 213, 116, 274, 150, 159, 340, 110, 353, 117, 93, 320, 173, 16, 92, 188, 344, 363, 374, 219, 47, 206, 303, 189] + 26: [136, 150, 63, 162, 16, 183, 266, 223, 88, 167, 83, 247, 48, 138, 323, 353, 97, 103, 268, 365, 17, 113, 45, 0, 256, 75, 232, 301, 7, 49, 325, 225, 8, 64, 100, 29, 13, 216, 284, 330, 235, 310, 322, 132, 1, 54, 68, 86, 237, 53, 230, 214, 304, 289, 33, 137, 369, 249, 146, 328, 359, 148, 319, 190, 229, 174, 24, 221, 57, 318, 10, 73, 76, 32, 114, 182, 25, 219, 220, 340, 317, 43, 346, 244, 154, 91, 296, 4, 243, 222, 58, 155, 288, 96, 106, 111, 89, 18, 339, 233, 338, 116, 279, 38, 355, 158, 245, 82, 200, 311, 259, 321, 133, 102, 251, 294, 71, 104, 161, 35, 107, 350, 123, 143, 134, 264, 300, 352, 141, 109, 59, 77, 326, 101, 324, 14, 250, 345, 95, 248, 309, 139, 169, 170, 269, 124, 253, 271, 342, 120, 337, 130, 293, 315, 108, 382, 180, 31, 360, 262, 306, 99, 186, 343, 66, 215, 65, 98, 267, 50, 144, 372, 298, 336, 3, 140, 185, 335, 74, 112, 163, 119, 358, 145, 282, 28, 257, 210, 168, 175, 209, 218, 217, 11, 291, 320, 263, 254, 69, 308, 61, 135, 30, 62, 67, 176, 272, 151, 142, 152, 173, 194, 127, 239, 159, 202, 115, 231, 177, 312, 117, 368, 12, 105, 47, 40, 9, 303, 193, 199, 373, 208, 283, 46, 381, 273, 203, 228, 234, 242, 172, 380, 236, 281, 70, 224, 344, 316, 307, 376, 92, 131, 265, 198, 26, 191, 367, 27, 241, 118, 285, 277, 195, 212, 171, 37, 129, 383, 280, 157, 78, 362, 255, 72, 34, 331, 206, 205, 56, 313, 85, 147, 23, 379, 213, 246, 261, 305, 90, 292, 181, 5, 184, 149, 94, 341, 238, 226, 36, 110, 156, 204, 179, 287, 2, 327, 79, 51, 192, 15, 81, 290, 252, 196, 187, 363, 19, 302, 197, 364, 354, 334, 275, 361, 240, 274, 258, 377, 211, 164, 366, 207, 52, 260, 348, 351, 80, 6, 21, 349, 371, 160, 276, 278, 227, 22, 126, 332, 55, 128, 178, 166, 44, 356, 122, 201, 20, 357, 87, 378, 41, 370, 93, 153, 189, 329, 121, 125, 165, 347, 297, 39, 333, 314, 270, 42, 295, 188, 84, 286, 60, 299, 374, 375] + 27: [103, 354, 58, 164, 320, 181, 213, 143, 75, 303, 381, 339, 77, 89, 322, 118, 305, 7, 91, 54, 174, 218, 45, 276, 171, 199, 250, 365, 275, 105, 130, 259, 185, 65, 157, 289, 62, 283, 173, 138, 314, 57, 206, 200, 39, 53, 60, 137, 225, 73, 341, 301, 219, 204, 135, 358, 348, 237, 335, 290, 266, 99, 102, 23, 278, 317, 27, 88, 162, 329, 304, 296, 46, 362, 2, 9, 101, 95, 107, 159, 132, 96, 346, 74, 229, 364, 86, 334, 194, 148, 11, 92, 209, 203, 146, 163, 286, 168, 227, 81, 59, 71, 49, 24, 131, 222, 230, 48, 260, 196, 115, 83, 140, 141, 337, 155, 125, 10, 114, 215, 267, 18, 347, 28, 249, 367, 205, 35, 33, 184, 208, 264, 302, 372, 94, 166, 108, 160, 19, 169, 243, 212, 176, 220, 12, 265, 349, 34, 279, 269, 26, 128, 224, 112, 55, 178, 324, 216, 238, 78, 284, 356, 187, 161, 316, 379, 214, 274, 287, 43, 239, 318, 121, 167, 361, 79, 14, 280, 359, 50, 352, 16, 158, 345, 226, 170, 255, 363, 378, 235, 240, 244, 312, 61, 252, 117, 351, 300, 315, 366, 369, 190, 182, 21, 76, 149, 72, 32, 325, 191, 42, 254, 368, 326, 172, 5, 375, 106, 248, 66, 307, 0, 3, 256, 144, 231, 282, 223, 41, 330, 195, 192, 165, 311, 210, 298, 17, 63, 236, 262, 90, 263, 30, 104, 70, 374, 119, 376, 179, 336, 183, 323, 242, 383, 343, 82, 201, 193, 133, 370, 328, 271, 136, 268, 122, 67, 147, 44, 321, 217, 123, 288, 139, 281, 319, 8, 186, 142, 257, 64, 87, 331, 295, 371, 36, 93, 247, 310, 234, 4, 69, 145, 31, 350, 357, 202, 377, 97, 228, 85, 380, 232, 156, 308, 297, 109, 241, 261, 309, 6, 175, 327, 124, 129, 299, 120, 47, 353, 153, 116, 306, 113, 313, 293, 150, 110, 68, 189, 1, 56, 221, 355, 51, 100, 270, 338, 37, 177, 80, 211, 333, 233, 197, 292, 188, 207, 251, 272, 340, 258, 294, 332, 25, 373, 98, 15, 126, 246, 291, 127, 360, 111, 20, 38, 29, 13, 84, 151, 344, 152, 154, 22, 253, 382, 273, 198, 52, 245, 277, 40, 134, 180, 285, 342] + 28: [161, 0, 324, 120, 122, 7, 108, 191, 71, 58, 352, 339, 41, 240, 217, 367, 380, 43, 184, 78, 46, 245, 44, 98, 177, 36, 104, 363, 24, 294, 96, 80, 38, 284, 347, 232, 174, 140, 65, 53, 87, 262, 10, 18, 60, 86, 115, 150, 250, 25, 355, 77, 176, 288, 37, 75, 166, 223, 158, 63, 160, 28, 289, 105, 56, 19, 114, 341, 68, 282, 260, 264, 57, 159, 205, 296, 230, 133, 280, 331, 117, 213, 39, 131, 146, 29, 281, 277, 189, 254, 124, 62, 138, 156, 180, 207, 26, 302, 99, 312, 22, 226, 103, 307, 369, 378, 325, 204, 100, 157, 67, 337, 209, 271, 273, 127, 268, 134, 14, 183, 171, 208, 295, 375, 74, 66, 170, 73, 136, 89, 348, 225, 246, 229, 55, 76, 111, 126, 354, 164, 186, 147, 215, 257, 185, 306, 52, 4, 196, 152, 233, 224, 263, 219, 368, 51, 261, 90, 167, 163, 221, 182, 238, 278, 16, 1, 121, 365, 265, 64, 305, 148, 106, 210, 211, 151, 382, 364, 323, 110, 292, 276, 252, 101, 123, 141, 360, 198, 212, 173, 279, 311, 168, 255, 30, 197, 310, 203, 172, 113, 272, 50, 137, 227, 165, 235, 135, 220, 32, 340, 376, 48, 316, 91, 118, 142, 49, 81, 314, 143, 322, 12, 334, 154, 377, 218, 266, 251, 303, 237, 47, 373, 102, 304, 83, 309, 301, 190, 329, 336, 344, 317, 107, 321, 239, 188, 195, 253, 357, 128, 3, 228, 200, 88, 285, 326, 269, 13, 33, 193, 206, 178, 27, 244, 6, 249, 274, 362, 61, 258, 332, 297, 372, 330, 287, 293, 8, 17, 192, 35, 291, 371, 145, 313, 2, 40, 298, 338, 92, 70, 243, 241, 248, 328, 97, 93, 199, 236, 320, 42, 5, 129, 361, 242, 299, 216, 349, 315, 300, 333, 194, 256, 327, 358, 69, 381, 169, 270, 342, 34, 109, 31, 119, 345, 231, 72, 139, 267, 45, 202, 181, 318, 9, 54, 359, 343, 356, 153, 162, 286, 201, 283, 155, 214, 374, 346, 95, 59, 116, 383, 130, 370, 125, 20, 308, 247, 335, 222, 290, 112, 179, 23, 82, 21, 175, 15, 84, 366, 144, 79, 149, 351, 234, 85, 259, 275, 94, 350, 187, 319, 11, 132, 379, 353] + 29: [118, 304, 23, 283, 25, 129, 320, 346, 243, 87, 63, 204, 123, 50, 172, 218, 106, 329, 18, 272, 101, 353, 105, 217, 316, 242, 230, 28, 191, 56, 42, 166, 253, 270, 219, 308, 252, 30, 164, 189, 2, 130, 64, 138, 98, 206, 26, 363, 244, 295, 173, 271, 54, 339, 309, 160, 140, 134, 343, 145, 319, 278, 360, 85, 139, 222, 225, 59, 97, 3, 205, 317, 238, 31, 157, 135, 209, 368, 7, 250, 233, 62, 376, 71, 115, 246, 234, 201, 8, 5, 1, 268, 256, 367, 322, 29, 361, 203, 282, 383, 365, 333, 186, 266, 180, 375, 24, 68, 210, 350, 324, 215, 257, 349, 347, 228, 150, 292, 294, 328, 122, 224, 52, 46, 303, 220, 70, 338, 239, 194, 149, 17, 184, 296, 325, 254, 21, 27, 372, 342, 274, 37, 185, 240, 197, 198, 236, 255, 195, 379, 74, 16, 65, 48, 190, 216, 382, 38, 4, 378, 128, 273, 300, 146, 181, 380, 125, 340, 22, 229, 40, 10, 213, 327, 84, 161, 187, 121, 113, 99, 337, 297, 49, 41, 100, 226, 81, 221, 305, 6, 212, 285, 73, 323, 44, 89, 124, 76, 262, 148, 326, 57, 332, 163, 82, 86, 94, 259, 116, 232, 72, 171, 345, 104, 20, 371, 83, 169, 126, 369, 79, 103, 153, 261, 192, 179, 162, 334, 35, 251, 301, 279, 95, 245, 107, 321, 117, 144, 39, 91, 196, 277, 60, 11, 58, 120, 110, 351, 112, 366, 175, 237, 102, 357, 61, 298, 182, 178, 19, 280, 78, 310, 32, 167, 47, 36, 170, 302, 53, 287, 299, 13, 374, 227, 168, 0, 263, 92, 109, 223, 330, 286, 165, 335, 247, 214, 355, 152, 336, 137, 362, 127, 88, 354, 33, 202, 119, 174, 188, 275, 341, 293, 132, 248, 12, 200, 131, 90, 264, 142, 269, 344, 373, 312, 315, 147, 111, 114, 158, 199, 15, 69, 356, 154, 211, 141, 96, 358, 80, 75, 291, 281, 289, 249, 108, 66, 318, 51, 67, 311, 14, 258, 265, 208, 183, 159, 235, 370, 207, 193, 364, 314, 34, 156, 136, 276, 151, 267, 313, 77, 359, 348, 93, 377, 55, 381, 9, 288, 352, 307, 306, 43, 45, 290, 155, 133, 331, 260, 231, 241, 284, 143, 177, 176] + 30: [208, 76, 366, 225, 11, 144, 283, 250, 97, 341, 253, 256, 141, 136, 292, 98, 157, 278, 179, 335, 51, 310, 55, 48, 44, 374, 186, 121, 220, 139, 69, 85, 209, 314, 178, 352, 207, 265, 63, 61, 191, 238, 8, 21, 22, 31, 36, 40, 239, 333, 243, 59, 2, 45, 41, 315, 216, 240, 100, 58, 215, 226, 281, 298, 174, 91, 72, 114, 163, 286, 349, 181, 282, 360, 342, 377, 371, 161, 203, 327, 368, 122, 169, 330, 102, 338, 171, 93, 251, 301, 47, 88, 94, 101, 118, 123, 140, 35, 289, 213, 13, 378, 206, 28, 68, 303, 340, 74, 152, 275, 210, 204, 344, 369, 343, 261, 54, 383, 197, 129, 241, 73, 50, 145, 194, 183, 347, 326, 381, 5, 370, 355, 16, 113, 126, 313, 367, 182, 252, 305, 128, 134, 146, 185, 266, 52, 62, 184, 137, 78, 295, 223, 147, 302, 43, 221, 77, 192, 309, 382, 170, 160, 23, 353, 231, 142, 359, 111, 375, 248, 297, 25, 166, 202, 263, 32, 57, 125, 130, 291, 173, 120, 198, 0, 149, 228, 4, 70, 307, 189, 218, 219, 65, 214, 351, 133, 222, 242, 257, 188, 246, 17, 362, 159, 89, 1, 193, 236, 277, 260, 67, 60, 132, 329, 150, 376, 66, 293, 7, 92, 288, 337, 107, 267, 264, 83, 155, 82, 127, 233, 255, 300, 80, 328, 229, 27, 131, 331, 237, 259, 245, 53, 373, 254, 86, 75, 168, 321, 346, 212, 271, 49, 138, 336, 339, 299, 217, 18, 285, 200, 96, 167, 162, 14, 172, 180, 244, 284, 79, 110, 230, 247, 279, 99, 287, 273, 153, 19, 190, 106, 56, 372, 34, 87, 176, 354, 268, 269, 37, 358, 156, 124, 272, 135, 24, 234, 64, 33, 205, 312, 12, 357, 6, 9, 195, 274, 258, 365, 108, 84, 306, 319, 280, 109, 332, 290, 175, 154, 276, 324, 304, 116, 323, 117, 3, 15, 308, 270, 199, 39, 148, 30, 201, 363, 322, 334, 262, 187, 143, 158, 29, 196, 46, 361, 10, 164, 316, 224, 317, 177, 71, 151, 320, 296, 356, 325, 104, 38, 103, 20, 294, 211, 115, 249, 318, 311, 95, 350, 90, 348, 165, 364, 81, 105, 232, 112, 235, 42, 26, 119, 227, 379, 345, 380] + 31: [0, 185, 32, 36, 335, 95, 330, 209, 58, 253, 62, 102, 223, 82, 74, 17, 66, 122, 46, 15, 97, 383, 141, 49, 354, 237, 376, 266, 204, 224, 107, 210, 367, 315, 99, 113, 127, 197, 372, 27, 174, 257, 151, 165, 148, 229, 132, 207, 159, 239, 227, 241, 116, 25, 219, 39, 119, 171, 72, 355, 258, 145, 236, 63, 23, 243, 277, 31, 318, 225, 373, 16, 84, 361, 362, 6, 272, 228, 48, 50, 240, 129, 298, 321, 135, 7, 235, 370, 313, 359, 311, 104, 117, 71, 289, 329, 128, 115, 87, 265, 279, 326, 270, 328, 22, 333, 283, 338, 112, 296, 211, 136, 40, 366, 65, 322, 256, 374, 217, 92, 142, 153, 12, 305, 275, 351, 198, 103, 85, 309, 24, 234, 327, 156, 79, 126, 114, 357, 377, 230, 203, 180, 294, 350, 233, 143, 261, 331, 3, 133, 187, 317, 349, 60, 34, 299, 348, 290, 380, 353, 232, 245, 175, 205, 222, 202, 213, 21, 302, 73, 196, 183, 271, 346, 352, 304, 238, 375, 160, 157, 168, 381, 53, 193, 255, 184, 30, 161, 5, 154, 212, 347, 26, 252, 70, 125, 365, 364, 215, 150, 325, 155, 378, 164, 276, 189, 78, 111, 231, 55, 134, 182, 77, 287, 307, 118, 336, 195, 260, 273, 14, 177, 371, 281, 263, 42, 139, 340, 300, 64, 293, 382, 295, 18, 179, 86, 358, 343, 37, 149, 201, 158, 363, 320, 192, 379, 147, 267, 146, 186, 61, 360, 56, 269, 28, 249, 93, 38, 368, 57, 105, 316, 312, 288, 303, 291, 4, 51, 20, 323, 1, 130, 80, 308, 345, 9, 262, 109, 280, 274, 282, 167, 301, 163, 297, 200, 90, 246, 68, 324, 144, 248, 221, 292, 69, 339, 173, 140, 188, 75, 334, 214, 106, 254, 152, 54, 2, 88, 137, 41, 284, 123, 45, 8, 110, 108, 59, 43, 91, 194, 47, 162, 101, 178, 337, 356, 52, 44, 344, 242, 319, 94, 199, 67, 341, 120, 100, 166, 278, 76, 19, 121, 250, 268, 96, 206, 170, 208, 131, 286, 33, 244, 138, 98, 81, 169, 176, 190, 314, 310, 369, 29, 285, 11, 247, 83, 220, 264, 306, 226, 259, 251, 342, 191, 216, 181, 124, 35, 332, 218, 10, 13, 89, 172] + 32: [63, 146, 310, 66, 141, 204, 96, 126, 258, 109, 289, 171, 227, 104, 69, 64, 48, 237, 127, 240, 81, 337, 24, 349, 363, 311, 42, 102, 103, 197, 73, 374, 196, 203, 377, 31, 23, 321, 217, 338, 194, 162, 68, 14, 123, 169, 177, 181, 367, 166, 246, 209, 271, 2, 342, 319, 202, 211, 308, 232, 120, 189, 298, 71, 26, 25, 157, 150, 286, 53, 371, 129, 6, 340, 154, 172, 221, 132, 152, 304, 153, 264, 0, 355, 118, 224, 46, 368, 47, 207, 11, 27, 147, 244, 245, 251, 352, 51, 344, 234, 362, 130, 121, 41, 186, 283, 279, 116, 273, 345, 266, 91, 111, 50, 314, 281, 59, 142, 39, 3, 302, 10, 37, 193, 34, 82, 299, 124, 238, 222, 330, 201, 170, 208, 133, 259, 242, 112, 291, 226, 326, 167, 262, 265, 94, 163, 164, 322, 49, 229, 370, 12, 40, 65, 75, 78, 156, 252, 58, 301, 212, 354, 199, 213, 178, 230, 336, 29, 176, 247, 315, 56, 139, 339, 9, 99, 243, 365, 223, 35, 160, 52, 188, 60, 76, 95, 98, 295, 235, 333, 173, 296, 218, 241, 107, 275, 108, 179, 8, 257, 16, 89, 263, 140, 233, 335, 306, 254, 325, 36, 231, 28, 250, 293, 382, 353, 70, 4, 381, 77, 236, 5, 136, 284, 125, 376, 20, 356, 67, 79, 255, 100, 180, 18, 17, 272, 15, 54, 300, 312, 148, 190, 38, 288, 346, 106, 280, 274, 214, 348, 83, 97, 87, 113, 294, 313, 72, 85, 292, 269, 45, 253, 183, 351, 115, 276, 22, 198, 317, 110, 210, 307, 195, 105, 13, 134, 305, 278, 343, 137, 260, 358, 192, 290, 93, 90, 316, 373, 33, 347, 327, 155, 268, 323, 200, 219, 359, 225, 174, 143, 131, 228, 7, 369, 55, 303, 101, 332, 324, 182, 256, 249, 80, 30, 309, 378, 372, 144, 282, 43, 165, 248, 117, 261, 44, 138, 220, 364, 216, 161, 74, 159, 267, 114, 379, 375, 92, 285, 122, 329, 135, 187, 21, 360, 61, 380, 184, 151, 331, 19, 357, 168, 297, 185, 175, 206, 239, 86, 32, 350, 84, 205, 366, 62, 158, 320, 361, 191, 287, 341, 128, 270, 119, 149, 334, 1, 277, 215, 88, 318, 328, 145, 57, 383] + 33: [38, 307, 240, 331, 323, 39, 125, 146, 206, 335, 54, 33, 155, 40, 288, 126, 303, 173, 174, 347, 375, 157, 200, 369, 213, 43, 3, 28, 166, 248, 327, 20, 346, 132, 76, 332, 247, 353, 214, 171, 359, 2, 46, 0, 265, 293, 333, 372, 91, 115, 267, 140, 280, 121, 183, 348, 84, 266, 255, 204, 30, 227, 308, 217, 18, 351, 355, 254, 79, 262, 197, 163, 152, 170, 106, 71, 66, 26, 110, 67, 135, 74, 286, 291, 310, 118, 242, 363, 7, 228, 284, 47, 239, 129, 69, 142, 339, 343, 154, 51, 259, 158, 107, 314, 108, 5, 190, 141, 25, 193, 131, 9, 305, 211, 149, 4, 198, 246, 55, 373, 279, 364, 137, 371, 281, 70, 285, 219, 10, 316, 130, 381, 120, 62, 315, 165, 274, 44, 344, 357, 282, 12, 34, 220, 36, 81, 299, 328, 63, 31, 96, 179, 201, 352, 127, 376, 218, 151, 192, 289, 61, 354, 187, 109, 45, 80, 156, 370, 114, 60, 49, 330, 113, 65, 278, 41, 252, 182, 181, 85, 78, 257, 178, 59, 199, 253, 313, 294, 203, 159, 189, 277, 319, 148, 283, 167, 320, 42, 297, 68, 322, 226, 169, 273, 1, 210, 356, 222, 235, 144, 205, 230, 383, 196, 382, 367, 186, 234, 368, 292, 24, 52, 271, 261, 318, 298, 300, 168, 188, 312, 244, 175, 378, 374, 269, 57, 302, 272, 264, 287, 260, 229, 301, 86, 145, 153, 379, 73, 241, 164, 37, 270, 160, 150, 208, 268, 14, 290, 93, 138, 123, 276, 19, 50, 180, 13, 58, 249, 350, 366, 101, 324, 136, 194, 111, 11, 225, 245, 365, 337, 92, 250, 99, 172, 77, 143, 83, 95, 177, 380, 258, 89, 75, 377, 231, 342, 147, 139, 361, 233, 17, 338, 117, 334, 8, 116, 329, 16, 216, 22, 162, 104, 88, 212, 105, 15, 215, 349, 53, 112, 221, 128, 23, 207, 27, 119, 98, 326, 97, 275, 309, 296, 100, 223, 236, 102, 362, 64, 251, 94, 176, 191, 325, 82, 358, 72, 48, 21, 35, 87, 237, 133, 311, 232, 202, 90, 317, 124, 256, 209, 360, 340, 122, 345, 336, 56, 103, 29, 295, 6, 238, 243, 184, 224, 134, 341, 195, 306, 321, 304, 185, 263, 161, 32] + 34: [108, 44, 151, 135, 145, 240, 178, 246, 83, 271, 78, 162, 208, 290, 81, 256, 136, 133, 33, 181, 73, 0, 247, 263, 113, 140, 62, 298, 105, 266, 314, 13, 101, 226, 331, 205, 17, 285, 90, 1, 355, 378, 320, 7, 375, 14, 76, 119, 179, 334, 372, 357, 239, 321, 291, 258, 59, 288, 41, 95, 134, 373, 12, 159, 368, 206, 195, 241, 48, 287, 367, 230, 215, 294, 10, 358, 142, 296, 374, 219, 36, 286, 28, 109, 242, 342, 212, 22, 43, 182, 38, 235, 177, 211, 122, 132, 16, 330, 61, 324, 311, 185, 148, 146, 115, 238, 92, 65, 225, 153, 184, 326, 327, 199, 251, 67, 270, 209, 102, 308, 103, 164, 283, 371, 261, 64, 68, 228, 111, 353, 49, 117, 278, 253, 9, 54, 120, 188, 252, 309, 198, 213, 160, 189, 249, 126, 196, 382, 18, 304, 31, 360, 315, 295, 191, 6, 125, 201, 107, 356, 123, 197, 143, 217, 30, 227, 333, 169, 232, 154, 63, 127, 139, 272, 85, 88, 233, 161, 34, 255, 165, 26, 39, 104, 128, 156, 338, 106, 121, 32, 224, 193, 306, 299, 190, 29, 332, 354, 203, 194, 347, 79, 335, 267, 244, 21, 144, 174, 84, 183, 172, 336, 328, 231, 364, 170, 361, 180, 322, 277, 149, 383, 98, 192, 269, 262, 93, 319, 52, 370, 339, 141, 281, 292, 349, 303, 129, 66, 279, 202, 15, 259, 248, 207, 82, 158, 362, 167, 379, 2, 8, 300, 4, 124, 58, 53, 313, 187, 37, 280, 346, 72, 214, 35, 5, 80, 19, 318, 221, 186, 147, 268, 282, 310, 100, 380, 57, 173, 55, 171, 351, 96, 216, 94, 350, 273, 316, 229, 340, 69, 3, 237, 74, 25, 243, 138, 220, 97, 222, 11, 87, 91, 110, 302, 345, 24, 60, 70, 245, 150, 359, 116, 301, 348, 114, 323, 23, 46, 264, 275, 289, 265, 274, 75, 131, 250, 155, 112, 71, 130, 325, 234, 369, 343, 341, 363, 366, 337, 218, 47, 312, 223, 293, 40, 99, 284, 254, 168, 77, 200, 329, 210, 175, 166, 137, 317, 236, 27, 204, 89, 50, 352, 157, 42, 56, 45, 51, 152, 305, 86, 118, 307, 176, 260, 297, 20, 257, 163, 344, 276, 376, 377, 381, 365] + 35: [319, 68, 322, 220, 144, 141, 138, 31, 147, 114, 335, 362, 159, 275, 357, 296, 158, 5, 294, 137, 152, 11, 170, 74, 348, 264, 330, 99, 380, 73, 43, 176, 105, 189, 149, 112, 23, 354, 238, 83, 225, 219, 226, 39, 120, 304, 228, 177, 45, 295, 72, 353, 237, 56, 257, 38, 154, 15, 265, 50, 266, 27, 102, 168, 18, 61, 328, 108, 143, 90, 323, 57, 227, 91, 382, 273, 179, 196, 315, 378, 317, 151, 253, 22, 26, 262, 97, 101, 270, 252, 280, 119, 229, 381, 293, 343, 1, 367, 276, 48, 260, 211, 368, 129, 3, 224, 46, 307, 14, 222, 373, 160, 244, 308, 282, 372, 42, 320, 16, 172, 109, 214, 369, 383, 376, 19, 17, 88, 198, 292, 259, 245, 94, 121, 77, 10, 69, 310, 188, 210, 173, 236, 291, 359, 345, 297, 86, 281, 62, 254, 67, 153, 231, 78, 41, 326, 361, 136, 312, 267, 356, 36, 171, 30, 125, 95, 32, 350, 366, 202, 339, 24, 290, 142, 66, 344, 274, 332, 161, 370, 181, 155, 288, 107, 351, 233, 123, 258, 212, 199, 85, 284, 363, 131, 53, 80, 246, 303, 318, 4, 221, 239, 364, 349, 331, 54, 157, 321, 128, 81, 93, 213, 209, 337, 96, 287, 8, 305, 347, 166, 174, 269, 217, 25, 6, 365, 156, 29, 115, 49, 165, 167, 271, 33, 371, 336, 76, 2, 118, 200, 75, 218, 203, 340, 44, 130, 286, 21, 116, 206, 375, 194, 191, 126, 37, 360, 140, 132, 192, 215, 334, 201, 256, 261, 111, 145, 82, 204, 184, 127, 175, 84, 35, 63, 248, 278, 249, 195, 255, 139, 148, 327, 208, 0, 341, 64, 283, 60, 169, 299, 133, 309, 182, 58, 55, 47, 289, 186, 311, 234, 241, 329, 98, 134, 272, 9, 298, 190, 313, 300, 302, 235, 20, 180, 117, 216, 185, 301, 279, 338, 103, 87, 135, 377, 306, 250, 263, 150, 178, 333, 242, 51, 71, 124, 146, 13, 28, 205, 342, 113, 240, 379, 314, 324, 346, 355, 352, 164, 162, 52, 163, 187, 325, 230, 268, 104, 243, 122, 12, 92, 277, 110, 106, 34, 7, 70, 285, 374, 79, 65, 207, 316, 232, 89, 358, 183, 197, 223, 193, 247, 251, 59, 100, 40] + 36: [232, 372, 197, 348, 299, 296, 380, 374, 150, 314, 31, 45, 246, 231, 293, 13, 68, 245, 155, 168, 216, 228, 46, 310, 0, 52, 335, 244, 119, 208, 51, 209, 204, 338, 251, 357, 118, 110, 235, 151, 285, 89, 269, 160, 114, 64, 37, 123, 22, 10, 223, 382, 359, 210, 241, 90, 291, 47, 85, 65, 201, 67, 166, 55, 132, 91, 50, 339, 354, 174, 100, 177, 255, 187, 81, 344, 358, 78, 220, 58, 239, 189, 236, 383, 60, 120, 226, 87, 7, 34, 27, 106, 221, 43, 270, 170, 184, 266, 12, 370, 62, 230, 326, 373, 73, 5, 54, 32, 175, 362, 319, 49, 349, 95, 164, 20, 171, 179, 237, 224, 305, 229, 104, 17, 157, 129, 243, 135, 281, 6, 158, 199, 337, 21, 115, 350, 278, 96, 124, 218, 234, 113, 279, 273, 371, 238, 225, 131, 74, 328, 98, 56, 97, 308, 125, 261, 240, 334, 288, 282, 167, 105, 298, 342, 142, 117, 271, 277, 323, 264, 76, 28, 148, 263, 283, 18, 44, 247, 315, 173, 316, 137, 61, 355, 154, 303, 227, 181, 306, 145, 290, 302, 368, 304, 193, 107, 176, 2, 320, 99, 301, 205, 92, 331, 333, 108, 219, 139, 361, 121, 172, 289, 153, 140, 343, 364, 134, 71, 212, 36, 188, 267, 365, 29, 329, 295, 381, 198, 35, 307, 254, 213, 26, 128, 327, 222, 367, 186, 292, 360, 272, 57, 178, 192, 84, 59, 258, 274, 352, 79, 287, 156, 33, 112, 194, 94, 122, 284, 322, 183, 15, 280, 66, 195, 102, 200, 257, 379, 88, 149, 318, 356, 363, 109, 259, 19, 249, 215, 312, 253, 161, 203, 136, 286, 182, 317, 127, 375, 53, 144, 311, 252, 250, 260, 242, 369, 207, 133, 332, 42, 321, 309, 111, 345, 63, 297, 300, 276, 346, 147, 11, 116, 211, 30, 39, 206, 165, 23, 159, 48, 24, 70, 169, 77, 130, 347, 324, 8, 378, 330, 353, 4, 214, 268, 16, 313, 340, 341, 325, 294, 185, 101, 196, 40, 275, 152, 233, 93, 162, 262, 9, 191, 138, 103, 69, 3, 72, 366, 41, 202, 217, 180, 38, 143, 351, 80, 163, 146, 83, 190, 265, 248, 256, 75, 14, 126, 86, 1, 82, 141, 377, 376, 25, 336] + 37: [218, 213, 199, 48, 193, 223, 344, 253, 22, 139, 181, 18, 145, 19, 122, 27, 149, 82, 143, 108, 285, 356, 83, 337, 347, 313, 38, 4, 116, 160, 17, 170, 175, 35, 81, 62, 130, 119, 300, 89, 90, 68, 84, 31, 132, 236, 239, 288, 40, 188, 123, 314, 46, 272, 292, 361, 171, 245, 165, 204, 163, 133, 359, 208, 76, 173, 144, 61, 39, 333, 329, 126, 206, 121, 244, 94, 284, 42, 154, 13, 91, 216, 169, 297, 191, 96, 231, 155, 11, 220, 275, 232, 99, 189, 352, 383, 268, 366, 0, 273, 311, 205, 190, 72, 77, 140, 360, 88, 328, 343, 257, 150, 127, 228, 176, 6, 230, 141, 278, 29, 100, 224, 80, 380, 97, 24, 325, 187, 299, 10, 60, 137, 310, 198, 106, 324, 177, 45, 219, 211, 346, 209, 56, 75, 294, 200, 340, 66, 309, 52, 372, 290, 382, 114, 185, 182, 147, 93, 330, 221, 370, 287, 270, 168, 217, 36, 264, 201, 87, 55, 37, 321, 195, 279, 105, 351, 138, 368, 303, 78, 295, 374, 248, 57, 202, 197, 369, 246, 358, 251, 375, 112, 148, 222, 162, 364, 242, 306, 341, 179, 174, 86, 129, 7, 65, 117, 131, 192, 315, 229, 21, 196, 365, 41, 30, 134, 376, 49, 247, 128, 255, 241, 274, 5, 172, 124, 152, 286, 291, 283, 142, 146, 107, 326, 54, 159, 381, 25, 238, 120, 293, 158, 113, 71, 348, 125, 289, 342, 234, 16, 302, 353, 14, 233, 153, 164, 157, 316, 51, 74, 203, 296, 92, 111, 34, 335, 331, 269, 312, 271, 280, 210, 249, 254, 215, 332, 378, 339, 166, 184, 237, 28, 261, 186, 2, 23, 276, 226, 109, 58, 349, 319, 243, 178, 362, 305, 95, 156, 355, 252, 318, 235, 32, 277, 322, 320, 104, 64, 323, 73, 161, 103, 3, 136, 69, 262, 373, 102, 317, 267, 298, 256, 266, 350, 115, 101, 308, 225, 70, 227, 20, 250, 367, 50, 377, 8, 301, 379, 79, 240, 265, 151, 363, 44, 371, 59, 47, 9, 327, 194, 118, 345, 336, 85, 258, 1, 43, 338, 304, 135, 15, 167, 334, 207, 98, 212, 33, 354, 26, 110, 53, 260, 183, 259, 63, 357, 214, 281, 180, 307, 12, 282, 67, 263] + 38: [301, 282, 50, 94, 322, 32, 171, 145, 212, 54, 97, 199, 125, 352, 271, 208, 193, 262, 57, 184, 179, 143, 228, 31, 28, 242, 353, 2, 173, 214, 56, 11, 47, 186, 351, 363, 164, 254, 259, 207, 116, 365, 330, 304, 161, 46, 60, 185, 6, 154, 187, 348, 332, 274, 177, 19, 17, 328, 253, 319, 137, 341, 107, 239, 29, 358, 87, 349, 156, 48, 246, 117, 306, 134, 174, 139, 310, 334, 172, 382, 25, 204, 283, 13, 102, 240, 320, 163, 175, 22, 377, 370, 312, 176, 237, 251, 266, 51, 114, 4, 178, 292, 226, 49, 130, 166, 135, 119, 234, 327, 90, 222, 67, 95, 150, 144, 255, 136, 34, 188, 289, 170, 26, 272, 235, 337, 360, 371, 104, 100, 295, 297, 183, 3, 357, 157, 314, 291, 218, 160, 162, 270, 339, 325, 203, 372, 383, 10, 369, 123, 285, 220, 63, 27, 317, 268, 267, 286, 225, 355, 227, 69, 224, 105, 58, 256, 7, 229, 265, 260, 76, 33, 258, 40, 200, 313, 273, 375, 44, 374, 247, 236, 12, 326, 350, 20, 167, 198, 249, 318, 340, 380, 158, 284, 126, 62, 287, 118, 263, 309, 230, 381, 279, 344, 108, 338, 106, 99, 14, 73, 362, 359, 88, 264, 368, 109, 276, 190, 84, 149, 103, 81, 296, 122, 74, 82, 215, 168, 35, 290, 91, 113, 24, 209, 281, 83, 127, 346, 38, 52, 378, 201, 189, 89, 213, 245, 354, 248, 379, 244, 0, 77, 257, 16, 288, 75, 324, 72, 59, 36, 68, 165, 96, 298, 5, 141, 197, 180, 15, 78, 302, 195, 43, 347, 61, 80, 55, 202, 70, 335, 18, 232, 315, 110, 155, 121, 64, 101, 221, 124, 366, 333, 93, 66, 86, 194, 39, 92, 373, 206, 53, 329, 361, 275, 147, 21, 321, 45, 211, 216, 142, 37, 342, 241, 356, 181, 131, 250, 23, 182, 261, 120, 311, 294, 71, 299, 192, 65, 364, 128, 153, 196, 1, 133, 98, 191, 269, 280, 30, 277, 223, 345, 8, 115, 293, 217, 278, 169, 300, 331, 233, 219, 146, 85, 9, 307, 323, 308, 367, 111, 151, 148, 376, 41, 305, 152, 238, 79, 129, 231, 252, 205, 138, 343, 316, 112, 42, 132, 303, 336, 140, 243, 159, 210] + 39: [282, 36, 176, 116, 153, 218, 292, 329, 204, 98, 15, 163, 146, 381, 352, 127, 31, 278, 331, 358, 276, 5, 226, 33, 72, 289, 193, 4, 243, 377, 169, 120, 58, 335, 189, 266, 206, 0, 197, 210, 326, 124, 12, 308, 29, 148, 361, 209, 310, 93, 100, 264, 1, 13, 155, 244, 297, 374, 141, 369, 51, 200, 84, 274, 340, 112, 190, 131, 62, 366, 63, 301, 212, 311, 241, 354, 338, 309, 114, 265, 283, 192, 287, 222, 78, 246, 252, 10, 219, 129, 294, 73, 154, 11, 52, 143, 247, 38, 85, 180, 348, 215, 279, 187, 145, 277, 172, 76, 178, 87, 375, 8, 248, 251, 138, 47, 152, 199, 364, 249, 14, 102, 45, 133, 128, 6, 130, 214, 166, 109, 288, 168, 157, 160, 175, 229, 233, 147, 205, 105, 332, 90, 321, 22, 66, 312, 313, 35, 223, 139, 242, 272, 270, 71, 295, 319, 77, 23, 202, 118, 48, 122, 225, 69, 367, 150, 322, 213, 182, 228, 95, 173, 230, 16, 220, 194, 376, 217, 196, 303, 108, 305, 123, 92, 255, 351, 32, 318, 57, 115, 165, 149, 104, 65, 314, 280, 234, 151, 119, 382, 174, 333, 250, 330, 49, 7, 235, 170, 191, 299, 101, 74, 50, 177, 307, 161, 134, 355, 88, 320, 275, 30, 363, 181, 60, 291, 19, 111, 337, 231, 211, 359, 238, 136, 370, 316, 344, 186, 334, 44, 372, 286, 132, 99, 110, 25, 360, 271, 296, 324, 40, 341, 365, 81, 298, 259, 42, 323, 239, 34, 126, 135, 371, 162, 302, 94, 106, 203, 164, 254, 306, 183, 91, 70, 27, 103, 46, 347, 37, 64, 342, 158, 67, 224, 184, 261, 9, 89, 236, 258, 379, 96, 82, 156, 325, 328, 80, 362, 17, 24, 208, 290, 227, 53, 232, 28, 336, 137, 353, 188, 144, 75, 345, 293, 185, 97, 357, 79, 68, 207, 171, 343, 41, 159, 55, 20, 18, 253, 339, 349, 125, 237, 269, 201, 21, 198, 56, 315, 43, 268, 368, 113, 267, 86, 2, 26, 121, 300, 3, 59, 273, 383, 140, 54, 263, 260, 378, 281, 317, 179, 373, 61, 167, 285, 221, 195, 240, 327, 216, 245, 346, 117, 107, 83, 142, 39, 284, 350, 256, 262, 356, 380, 304, 257] + 40: [31, 359, 367, 52, 153, 64, 74, 3, 91, 363, 336, 341, 322, 278, 200, 188, 137, 44, 99, 189, 25, 155, 339, 333, 177, 304, 301, 139, 241, 122, 141, 125, 135, 16, 174, 106, 119, 180, 39, 87, 255, 191, 72, 5, 92, 149, 248, 300, 319, 71, 33, 260, 204, 283, 160, 128, 164, 58, 97, 28, 303, 136, 321, 289, 27, 236, 205, 259, 307, 150, 138, 94, 103, 29, 356, 281, 273, 293, 222, 246, 78, 121, 361, 13, 32, 182, 34, 111, 325, 315, 109, 292, 220, 225, 144, 105, 15, 328, 346, 280, 55, 101, 247, 8, 332, 372, 59, 228, 275, 326, 271, 166, 211, 12, 221, 239, 56, 57, 178, 377, 192, 120, 206, 329, 37, 18, 233, 291, 118, 256, 84, 266, 117, 40, 218, 231, 114, 313, 223, 298, 83, 126, 69, 343, 68, 142, 179, 357, 70, 373, 265, 161, 369, 81, 90, 17, 1, 168, 274, 185, 11, 199, 382, 46, 187, 263, 244, 290, 294, 324, 93, 243, 171, 314, 261, 6, 147, 212, 184, 268, 49, 113, 242, 22, 173, 96, 176, 24, 172, 335, 353, 376, 175, 360, 108, 379, 286, 62, 297, 215, 88, 235, 351, 210, 284, 143, 63, 80, 54, 38, 148, 227, 53, 364, 43, 110, 2, 338, 305, 282, 19, 131, 345, 238, 270, 14, 276, 310, 50, 66, 77, 217, 234, 152, 381, 86, 272, 146, 312, 194, 378, 349, 21, 226, 169, 75, 26, 279, 158, 198, 100, 311, 296, 89, 209, 61, 193, 216, 196, 262, 316, 95, 82, 130, 7, 264, 318, 237, 48, 47, 366, 36, 375, 288, 348, 383, 140, 203, 257, 104, 352, 342, 45, 245, 320, 240, 331, 214, 317, 250, 358, 340, 213, 67, 337, 156, 254, 251, 224, 159, 362, 129, 162, 277, 145, 334, 302, 269, 79, 365, 299, 306, 165, 287, 167, 323, 350, 60, 73, 201, 115, 186, 0, 102, 368, 230, 35, 134, 354, 4, 380, 112, 20, 197, 170, 249, 207, 183, 190, 132, 181, 98, 107, 202, 232, 208, 258, 347, 9, 10, 219, 253, 30, 308, 370, 229, 309, 41, 65, 151, 355, 327, 371, 330, 195, 51, 85, 76, 116, 133, 23, 124, 374, 295, 163, 285, 154, 267, 157, 252, 127, 42, 344, 123] + 41: [49, 190, 119, 335, 27, 86, 365, 293, 79, 24, 206, 306, 348, 127, 140, 126, 217, 301, 379, 260, 156, 340, 133, 288, 66, 107, 6, 130, 315, 303, 359, 154, 100, 165, 13, 248, 113, 155, 67, 20, 183, 145, 189, 362, 382, 233, 247, 216, 378, 184, 159, 367, 103, 255, 273, 92, 111, 358, 302, 82, 383, 3, 219, 194, 349, 102, 125, 93, 229, 325, 330, 380, 101, 181, 208, 160, 10, 192, 15, 300, 179, 180, 207, 38, 147, 182, 238, 47, 201, 240, 211, 356, 304, 230, 296, 278, 199, 355, 197, 122, 11, 249, 50, 97, 187, 161, 311, 108, 45, 4, 202, 243, 308, 64, 225, 256, 235, 117, 242, 8, 63, 290, 277, 261, 220, 214, 37, 342, 39, 65, 72, 332, 148, 137, 29, 274, 267, 319, 270, 16, 58, 118, 227, 309, 170, 142, 369, 215, 166, 57, 84, 76, 172, 279, 12, 95, 318, 222, 264, 163, 336, 70, 54, 276, 258, 167, 112, 210, 363, 153, 18, 43, 173, 89, 41, 188, 236, 381, 234, 105, 310, 28, 265, 329, 331, 88, 177, 372, 291, 52, 263, 357, 60, 283, 275, 185, 71, 150, 200, 285, 136, 314, 262, 44, 326, 351, 25, 23, 134, 116, 282, 55, 237, 289, 224, 266, 176, 186, 19, 213, 244, 146, 59, 272, 352, 0, 141, 68, 73, 175, 171, 370, 110, 323, 377, 109, 203, 333, 31, 120, 350, 114, 366, 305, 376, 307, 168, 96, 34, 69, 347, 337, 104, 53, 286, 218, 252, 56, 313, 254, 271, 115, 144, 328, 151, 295, 81, 317, 61, 128, 123, 292, 1, 191, 259, 48, 257, 204, 375, 373, 121, 343, 106, 341, 281, 228, 22, 85, 374, 298, 129, 87, 196, 90, 223, 124, 7, 360, 334, 198, 9, 324, 42, 353, 26, 32, 226, 83, 294, 138, 250, 268, 299, 284, 91, 94, 74, 221, 99, 75, 78, 77, 297, 149, 316, 209, 14, 245, 62, 2, 162, 346, 169, 135, 40, 132, 321, 269, 30, 205, 251, 212, 368, 327, 364, 21, 280, 253, 80, 35, 239, 36, 174, 345, 241, 46, 322, 344, 339, 51, 131, 338, 246, 5, 371, 354, 232, 33, 143, 287, 320, 158, 98, 195, 231, 17, 139, 157, 312, 361, 193, 164, 178, 152] + 42: [123, 184, 212, 41, 349, 55, 281, 327, 351, 370, 29, 135, 28, 329, 36, 92, 33, 362, 380, 241, 301, 225, 323, 183, 226, 61, 251, 156, 364, 84, 284, 82, 360, 23, 288, 347, 96, 353, 107, 14, 271, 163, 273, 242, 25, 71, 95, 254, 152, 93, 154, 50, 106, 151, 150, 337, 377, 208, 21, 235, 248, 30, 67, 17, 173, 216, 314, 316, 257, 192, 113, 311, 62, 89, 315, 58, 205, 378, 278, 26, 194, 267, 90, 363, 124, 334, 22, 85, 190, 110, 78, 43, 91, 289, 294, 324, 117, 218, 2, 1, 303, 116, 264, 262, 263, 209, 189, 373, 328, 221, 169, 344, 147, 181, 322, 52, 223, 245, 101, 132, 307, 238, 49, 310, 196, 16, 270, 293, 120, 206, 98, 73, 185, 136, 207, 133, 276, 79, 54, 142, 240, 352, 369, 339, 31, 155, 333, 375, 114, 211, 63, 374, 220, 6, 342, 191, 275, 320, 140, 187, 87, 326, 335, 280, 118, 149, 32, 60, 8, 371, 260, 130, 34, 298, 355, 269, 233, 175, 272, 197, 104, 285, 304, 309, 153, 12, 11, 81, 317, 365, 46, 126, 359, 172, 256, 210, 148, 228, 350, 72, 195, 306, 255, 122, 379, 131, 4, 239, 230, 201, 356, 77, 366, 39, 160, 340, 137, 372, 9, 139, 232, 258, 291, 68, 112, 213, 229, 321, 128, 292, 330, 367, 253, 35, 70, 159, 382, 66, 361, 376, 217, 176, 158, 188, 42, 357, 215, 179, 243, 200, 48, 265, 358, 354, 259, 224, 214, 161, 103, 164, 45, 76, 381, 18, 146, 180, 64, 244, 299, 313, 332, 125, 300, 261, 290, 145, 368, 75, 186, 383, 69, 115, 83, 182, 0, 15, 24, 27, 94, 345, 111, 37, 20, 305, 279, 282, 162, 129, 59, 127, 277, 274, 178, 236, 287, 165, 308, 38, 202, 227, 65, 80, 237, 219, 246, 109, 99, 5, 336, 53, 346, 343, 199, 102, 312, 296, 144, 174, 88, 47, 57, 331, 13, 86, 40, 121, 266, 268, 325, 138, 295, 119, 247, 168, 222, 108, 203, 319, 348, 141, 341, 286, 167, 105, 338, 143, 234, 166, 297, 51, 19, 231, 283, 157, 97, 7, 204, 170, 171, 56, 318, 250, 10, 3, 198, 302, 134, 249, 100, 44, 177, 74, 252, 193] + 43: [168, 359, 298, 262, 278, 112, 20, 103, 152, 55, 127, 313, 307, 321, 4, 222, 282, 204, 306, 26, 36, 67, 334, 148, 293, 180, 56, 74, 9, 370, 295, 329, 144, 353, 118, 134, 211, 357, 341, 69, 7, 141, 383, 104, 25, 166, 331, 44, 225, 17, 30, 344, 308, 35, 13, 94, 131, 186, 322, 227, 198, 121, 89, 191, 238, 275, 339, 271, 160, 365, 155, 243, 60, 38, 45, 251, 309, 343, 159, 304, 267, 76, 19, 173, 265, 316, 162, 114, 41, 228, 42, 133, 350, 54, 189, 354, 375, 335, 297, 27, 332, 197, 349, 366, 57, 337, 111, 264, 1, 147, 368, 150, 90, 346, 277, 299, 149, 84, 196, 107, 49, 229, 143, 120, 263, 288, 170, 122, 8, 65, 151, 233, 290, 240, 311, 124, 106, 236, 208, 333, 33, 310, 192, 95, 66, 372, 75, 369, 6, 142, 59, 254, 22, 81, 138, 323, 274, 269, 374, 2, 232, 327, 83, 123, 296, 130, 241, 145, 99, 47, 210, 284, 101, 174, 116, 207, 294, 132, 158, 268, 300, 110, 260, 230, 62, 249, 270, 58, 289, 361, 206, 214, 98, 92, 283, 23, 177, 68, 216, 252, 326, 377, 29, 360, 305, 202, 255, 272, 154, 246, 234, 140, 5, 61, 10, 63, 185, 165, 217, 46, 128, 325, 175, 72, 279, 87, 287, 358, 355, 187, 285, 248, 172, 281, 340, 139, 244, 184, 373, 245, 315, 347, 190, 164, 82, 129, 364, 239, 363, 93, 223, 203, 338, 136, 379, 32, 378, 48, 286, 135, 367, 257, 237, 345, 24, 50, 253, 167, 220, 226, 18, 64, 71, 117, 193, 109, 320, 179, 312, 199, 328, 21, 362, 91, 176, 231, 195, 3, 221, 156, 14, 351, 181, 371, 37, 97, 235, 291, 342, 318, 108, 78, 250, 73, 205, 88, 219, 200, 261, 157, 194, 273, 102, 113, 266, 213, 125, 80, 31, 292, 356, 163, 381, 119, 330, 258, 51, 276, 0, 137, 352, 96, 212, 302, 169, 348, 105, 171, 324, 43, 161, 218, 39, 100, 314, 153, 301, 178, 224, 280, 85, 77, 52, 380, 86, 115, 34, 79, 28, 12, 242, 183, 16, 70, 146, 256, 215, 11, 259, 126, 247, 209, 188, 336, 201, 53, 317, 303, 40, 15, 319, 376, 182, 382] + 44: [213, 101, 238, 272, 60, 257, 252, 325, 93, 86, 118, 329, 144, 337, 276, 138, 350, 290, 150, 70, 130, 380, 87, 134, 162, 136, 83, 159, 243, 309, 211, 237, 230, 345, 49, 114, 245, 375, 373, 99, 247, 176, 293, 31, 58, 75, 209, 106, 77, 379, 284, 167, 110, 227, 29, 135, 30, 280, 289, 63, 102, 217, 355, 117, 244, 299, 173, 201, 132, 286, 202, 369, 107, 46, 370, 40, 59, 318, 341, 113, 234, 109, 367, 65, 35, 80, 239, 210, 283, 260, 297, 52, 76, 181, 339, 116, 301, 222, 223, 97, 178, 180, 43, 140, 11, 187, 182, 306, 304, 275, 158, 265, 85, 175, 163, 364, 79, 338, 54, 120, 36, 126, 15, 185, 149, 231, 23, 20, 72, 193, 4, 51, 255, 200, 195, 119, 298, 268, 356, 111, 88, 371, 13, 332, 191, 171, 170, 0, 351, 188, 277, 279, 143, 98, 212, 198, 228, 125, 343, 91, 224, 61, 154, 39, 71, 378, 174, 177, 327, 344, 196, 74, 205, 347, 32, 305, 203, 319, 204, 62, 273, 216, 5, 115, 28, 330, 37, 152, 148, 16, 161, 322, 199, 172, 346, 17, 300, 84, 68, 331, 166, 146, 242, 294, 365, 360, 14, 340, 192, 24, 122, 287, 285, 160, 269, 381, 128, 220, 278, 334, 105, 323, 81, 3, 263, 357, 256, 137, 312, 1, 27, 151, 363, 302, 47, 73, 316, 281, 295, 374, 10, 274, 168, 64, 155, 190, 82, 311, 236, 383, 333, 142, 33, 95, 324, 262, 6, 186, 219, 56, 352, 366, 359, 44, 157, 41, 92, 90, 214, 377, 169, 104, 241, 9, 53, 183, 2, 253, 22, 251, 372, 307, 123, 127, 353, 308, 112, 303, 317, 362, 21, 25, 271, 215, 328, 368, 34, 320, 249, 264, 358, 225, 89, 121, 266, 296, 55, 100, 131, 248, 67, 221, 292, 354, 108, 165, 270, 19, 336, 179, 235, 18, 314, 232, 42, 45, 153, 50, 240, 69, 139, 335, 133, 208, 189, 12, 226, 348, 145, 258, 382, 267, 376, 229, 288, 313, 141, 38, 48, 291, 94, 207, 184, 254, 349, 315, 66, 164, 96, 261, 342, 26, 147, 282, 8, 78, 156, 218, 57, 250, 321, 7, 124, 326, 233, 194, 246, 103, 259, 361, 197, 310, 129, 206] + 45: [92, 95, 219, 284, 120, 375, 286, 165, 128, 183, 228, 223, 16, 104, 250, 112, 80, 213, 157, 315, 236, 4, 340, 65, 34, 205, 38, 264, 231, 255, 204, 105, 15, 147, 93, 136, 332, 31, 382, 200, 265, 259, 75, 237, 299, 361, 100, 174, 140, 27, 164, 318, 317, 274, 369, 354, 61, 349, 234, 254, 307, 158, 277, 70, 313, 267, 86, 108, 175, 67, 22, 253, 58, 116, 46, 358, 29, 322, 127, 288, 142, 289, 368, 202, 225, 90, 62, 143, 270, 366, 311, 184, 11, 240, 138, 64, 178, 8, 329, 301, 144, 25, 176, 378, 47, 348, 52, 275, 239, 162, 155, 74, 12, 327, 249, 217, 292, 96, 1, 370, 330, 126, 87, 5, 150, 333, 381, 374, 363, 48, 78, 343, 238, 321, 89, 82, 353, 53, 216, 325, 49, 72, 355, 221, 10, 201, 276, 173, 134, 139, 171, 103, 269, 124, 224, 39, 118, 310, 229, 245, 84, 7, 345, 44, 32, 2, 123, 218, 344, 170, 304, 320, 294, 379, 342, 177, 79, 203, 371, 362, 337, 323, 56, 152, 159, 194, 6, 335, 195, 17, 117, 83, 227, 334, 33, 383, 316, 182, 356, 262, 21, 163, 380, 258, 187, 196, 36, 88, 54, 357, 135, 281, 279, 109, 261, 257, 35, 19, 252, 145, 37, 211, 263, 314, 0, 119, 3, 377, 111, 214, 153, 167, 193, 295, 77, 28, 60, 69, 244, 347, 154, 42, 367, 191, 188, 346, 141, 146, 298, 212, 272, 331, 359, 45, 326, 372, 328, 251, 242, 94, 106, 208, 303, 222, 20, 207, 319, 291, 283, 241, 151, 285, 220, 341, 113, 71, 73, 102, 280, 97, 232, 352, 287, 99, 130, 181, 137, 266, 23, 293, 373, 81, 110, 197, 339, 85, 180, 297, 107, 248, 168, 122, 51, 30, 308, 306, 360, 179, 260, 24, 302, 50, 76, 133, 290, 59, 9, 273, 57, 129, 166, 309, 268, 190, 91, 125, 18, 186, 206, 101, 278, 66, 235, 14, 40, 192, 121, 161, 350, 324, 233, 199, 247, 160, 131, 114, 209, 351, 198, 55, 115, 338, 68, 210, 41, 156, 26, 365, 376, 63, 43, 230, 256, 296, 98, 282, 169, 271, 246, 312, 364, 215, 243, 132, 189, 226, 305, 148, 13, 172, 149, 185, 336, 300] + 46: [142, 355, 106, 201, 46, 238, 6, 301, 60, 114, 199, 3, 85, 62, 117, 260, 132, 118, 192, 298, 23, 250, 237, 193, 383, 373, 78, 297, 189, 9, 265, 145, 283, 262, 244, 371, 43, 358, 330, 126, 196, 296, 185, 100, 178, 365, 122, 175, 183, 253, 367, 188, 240, 51, 324, 312, 40, 165, 2, 320, 282, 280, 33, 372, 334, 315, 109, 13, 41, 272, 267, 158, 377, 329, 92, 24, 222, 56, 317, 241, 91, 370, 257, 52, 138, 275, 341, 363, 269, 29, 116, 151, 225, 82, 379, 356, 352, 380, 354, 210, 327, 202, 332, 12, 187, 55, 44, 219, 215, 131, 195, 227, 232, 197, 137, 50, 362, 273, 103, 59, 111, 308, 97, 169, 223, 69, 293, 342, 177, 93, 98, 150, 163, 310, 31, 236, 1, 174, 276, 70, 14, 147, 5, 213, 311, 286, 149, 335, 233, 96, 221, 344, 271, 38, 18, 146, 102, 30, 143, 120, 80, 218, 156, 316, 63, 95, 205, 157, 45, 101, 263, 289, 119, 318, 159, 277, 261, 217, 309, 171, 208, 15, 77, 366, 381, 48, 181, 47, 349, 270, 220, 27, 133, 58, 230, 66, 368, 170, 246, 284, 136, 68, 303, 203, 350, 351, 108, 155, 99, 353, 295, 166, 176, 128, 172, 340, 336, 307, 328, 360, 313, 173, 348, 20, 333, 90, 361, 234, 337, 112, 127, 229, 300, 134, 251, 54, 0, 28, 231, 36, 10, 256, 207, 152, 19, 25, 274, 154, 124, 254, 345, 76, 79, 211, 8, 376, 287, 121, 180, 37, 129, 294, 198, 17, 125, 226, 35, 144, 89, 161, 7, 74, 359, 190, 285, 339, 347, 135, 258, 281, 87, 73, 306, 123, 84, 167, 252, 88, 247, 139, 110, 319, 314, 16, 239, 104, 194, 204, 113, 242, 266, 228, 130, 22, 326, 168, 259, 369, 304, 53, 292, 235, 268, 32, 141, 290, 299, 346, 71, 322, 264, 291, 86, 278, 26, 67, 75, 94, 288, 105, 212, 179, 200, 182, 325, 302, 34, 64, 343, 140, 224, 249, 191, 209, 214, 378, 338, 374, 39, 49, 115, 83, 186, 245, 42, 4, 164, 162, 216, 321, 57, 81, 206, 160, 255, 382, 243, 153, 364, 331, 184, 305, 375, 65, 21, 11, 72, 107, 279, 248, 357, 148, 323, 61] + 47: [195, 307, 347, 357, 193, 309, 215, 196, 21, 40, 342, 63, 313, 95, 68, 166, 231, 65, 184, 51, 101, 173, 252, 183, 139, 211, 163, 281, 37, 107, 132, 297, 150, 275, 57, 325, 108, 339, 277, 88, 270, 167, 125, 254, 169, 7, 369, 326, 3, 29, 137, 171, 119, 61, 314, 353, 274, 287, 188, 363, 251, 351, 69, 104, 249, 324, 284, 199, 0, 138, 233, 112, 315, 80, 15, 289, 276, 306, 115, 20, 97, 160, 48, 282, 383, 174, 58, 220, 202, 244, 99, 165, 13, 272, 191, 246, 343, 158, 134, 179, 35, 170, 90, 294, 362, 240, 59, 153, 114, 330, 84, 219, 151, 228, 370, 197, 296, 148, 39, 210, 234, 141, 243, 28, 225, 60, 341, 260, 130, 190, 152, 302, 245, 5, 133, 222, 47, 299, 283, 206, 182, 83, 156, 293, 54, 22, 75, 192, 279, 280, 345, 316, 198, 168, 346, 367, 98, 226, 93, 301, 223, 285, 323, 255, 205, 17, 4, 354, 378, 336, 348, 147, 259, 111, 185, 32, 81, 9, 242, 216, 358, 374, 16, 105, 76, 142, 116, 217, 221, 311, 214, 360, 44, 154, 300, 136, 371, 34, 14, 257, 36, 110, 118, 218, 159, 176, 26, 377, 124, 263, 298, 77, 203, 25, 45, 27, 53, 91, 321, 213, 273, 258, 200, 157, 144, 10, 365, 266, 74, 290, 30, 317, 145, 11, 268, 256, 241, 318, 236, 56, 352, 162, 382, 331, 291, 227, 333, 320, 175, 129, 131, 123, 212, 250, 269, 67, 224, 103, 140, 364, 322, 355, 52, 106, 23, 356, 71, 126, 328, 332, 329, 186, 253, 46, 120, 72, 177, 380, 86, 38, 372, 264, 161, 295, 8, 113, 239, 288, 24, 181, 359, 187, 43, 1, 286, 127, 344, 267, 327, 229, 122, 230, 155, 135, 42, 41, 33, 50, 12, 338, 180, 117, 366, 18, 121, 303, 292, 278, 49, 310, 334, 102, 19, 308, 207, 350, 100, 178, 85, 64, 78, 232, 261, 128, 62, 373, 312, 87, 271, 143, 375, 109, 305, 368, 79, 376, 238, 349, 235, 265, 208, 262, 89, 319, 172, 73, 204, 237, 340, 164, 96, 201, 70, 335, 337, 94, 31, 2, 248, 149, 189, 55, 379, 92, 304, 361, 247, 194, 82, 6, 66, 381, 146, 209] + 48: [17, 52, 85, 288, 65, 358, 99, 90, 83, 369, 235, 48, 325, 252, 290, 219, 161, 25, 75, 88, 118, 31, 172, 218, 22, 100, 158, 63, 374, 40, 206, 259, 382, 272, 214, 69, 37, 87, 309, 148, 154, 153, 124, 68, 103, 199, 209, 196, 271, 276, 78, 9, 117, 226, 121, 164, 268, 375, 223, 264, 185, 380, 368, 312, 322, 192, 247, 73, 89, 212, 275, 231, 307, 70, 49, 36, 269, 367, 346, 107, 82, 71, 366, 29, 165, 335, 66, 356, 86, 345, 251, 122, 337, 348, 245, 227, 140, 239, 141, 159, 270, 150, 236, 58, 33, 6, 5, 372, 342, 134, 232, 222, 130, 291, 233, 45, 255, 24, 168, 57, 317, 281, 72, 204, 280, 12, 55, 274, 178, 256, 95, 93, 143, 277, 350, 149, 171, 260, 365, 126, 265, 355, 304, 114, 328, 273, 381, 297, 77, 109, 19, 74, 157, 189, 177, 254, 34, 305, 378, 300, 7, 293, 112, 324, 162, 221, 230, 79, 202, 113, 289, 81, 84, 18, 98, 137, 243, 286, 194, 326, 323, 213, 228, 191, 8, 377, 332, 383, 364, 131, 1, 250, 132, 330, 353, 263, 249, 301, 234, 295, 133, 287, 139, 363, 186, 354, 371, 210, 246, 299, 174, 123, 341, 111, 4, 13, 379, 351, 119, 97, 43, 349, 144, 35, 39, 173, 310, 313, 27, 294, 238, 225, 298, 60, 183, 262, 197, 333, 30, 308, 267, 102, 101, 237, 26, 145, 343, 182, 28, 104, 327, 208, 316, 181, 155, 229, 179, 50, 120, 190, 170, 357, 315, 42, 339, 14, 138, 302, 352, 53, 169, 59, 216, 32, 135, 373, 224, 61, 201, 376, 331, 282, 248, 23, 220, 167, 136, 314, 283, 128, 311, 15, 20, 279, 44, 2, 21, 166, 240, 38, 142, 41, 320, 156, 193, 257, 370, 0, 160, 242, 347, 360, 180, 241, 96, 11, 198, 127, 292, 94, 261, 47, 217, 3, 56, 105, 110, 188, 338, 106, 296, 176, 303, 258, 10, 129, 76, 266, 284, 62, 51, 215, 116, 203, 207, 147, 344, 359, 115, 184, 319, 205, 175, 152, 285, 340, 329, 321, 318, 91, 64, 80, 146, 253, 211, 16, 151, 195, 108, 187, 92, 67, 163, 278, 244, 361, 362, 125, 46, 54, 306, 336, 200, 334] + 49: [302, 37, 209, 115, 212, 208, 148, 60, 91, 74, 381, 264, 94, 48, 97, 362, 80, 56, 277, 29, 4, 81, 139, 179, 35, 338, 172, 85, 71, 355, 84, 192, 143, 145, 168, 316, 7, 341, 287, 21, 249, 230, 32, 68, 135, 356, 123, 191, 321, 157, 197, 304, 181, 78, 261, 201, 177, 133, 260, 194, 30, 332, 195, 366, 336, 310, 16, 138, 365, 34, 41, 273, 371, 352, 98, 227, 114, 176, 358, 12, 31, 190, 154, 364, 88, 343, 87, 372, 334, 161, 141, 263, 129, 188, 300, 64, 297, 305, 242, 251, 294, 59, 353, 25, 276, 325, 107, 132, 187, 45, 314, 333, 144, 174, 137, 221, 140, 170, 189, 296, 301, 82, 327, 134, 351, 244, 53, 117, 200, 151, 228, 22, 52, 232, 166, 51, 165, 162, 171, 350, 203, 258, 50, 322, 253, 155, 9, 193, 83, 65, 293, 241, 90, 44, 292, 220, 344, 8, 100, 122, 328, 254, 340, 368, 240, 128, 89, 222, 225, 303, 238, 178, 103, 345, 280, 378, 46, 2, 342, 256, 125, 324, 27, 315, 363, 102, 236, 207, 291, 3, 347, 375, 126, 75, 271, 210, 15, 234, 116, 110, 180, 262, 380, 289, 312, 255, 95, 5, 205, 73, 63, 245, 196, 198, 160, 163, 146, 10, 308, 62, 359, 239, 72, 119, 0, 204, 101, 283, 182, 326, 57, 93, 367, 266, 99, 152, 252, 26, 370, 38, 374, 268, 313, 233, 346, 136, 213, 40, 335, 39, 218, 246, 120, 331, 131, 109, 121, 1, 17, 23, 223, 214, 224, 248, 376, 173, 33, 43, 307, 339, 47, 226, 106, 49, 285, 108, 299, 104, 357, 167, 237, 159, 379, 281, 247, 288, 373, 317, 79, 6, 202, 184, 319, 150, 66, 278, 275, 199, 76, 243, 329, 175, 183, 235, 250, 169, 382, 86, 311, 290, 112, 127, 55, 216, 67, 330, 156, 142, 320, 130, 61, 124, 282, 361, 348, 185, 111, 147, 42, 96, 231, 215, 383, 219, 24, 92, 360, 272, 19, 149, 257, 158, 105, 270, 153, 259, 286, 306, 269, 186, 298, 164, 58, 279, 28, 54, 70, 318, 323, 77, 20, 295, 267, 36, 309, 14, 211, 69, 118, 206, 284, 113, 354, 274, 377, 13, 229, 18, 265, 217, 11, 369, 349, 337] + 50: [86, 69, 26, 33, 140, 370, 125, 304, 329, 256, 295, 184, 15, 133, 122, 71, 165, 375, 219, 189, 180, 310, 81, 64, 160, 105, 278, 347, 362, 153, 339, 349, 156, 141, 354, 162, 291, 209, 21, 201, 216, 31, 120, 52, 131, 23, 50, 345, 268, 215, 350, 57, 137, 367, 287, 280, 327, 334, 114, 130, 121, 274, 301, 239, 186, 194, 290, 53, 276, 267, 73, 152, 242, 340, 108, 5, 297, 4, 344, 7, 305, 212, 90, 36, 82, 40, 381, 103, 328, 158, 144, 115, 307, 222, 55, 365, 29, 188, 27, 128, 311, 229, 262, 373, 377, 296, 88, 79, 272, 270, 363, 196, 313, 19, 348, 359, 247, 208, 94, 92, 163, 255, 211, 223, 37, 39, 337, 259, 63, 308, 68, 150, 323, 147, 77, 10, 246, 245, 104, 161, 118, 336, 241, 93, 100, 210, 325, 129, 226, 333, 352, 146, 175, 220, 217, 314, 253, 213, 6, 24, 380, 75, 203, 134, 252, 250, 139, 303, 107, 126, 99, 113, 135, 127, 204, 177, 200, 320, 237, 355, 285, 11, 324, 13, 47, 360, 279, 309, 254, 364, 182, 111, 316, 315, 214, 3, 235, 38, 284, 366, 312, 199, 0, 22, 155, 249, 353, 96, 48, 228, 183, 102, 206, 197, 85, 234, 322, 145, 172, 251, 236, 191, 281, 123, 106, 46, 383, 148, 171, 87, 346, 61, 157, 70, 142, 167, 227, 368, 257, 136, 109, 32, 56, 1, 25, 67, 218, 273, 62, 338, 341, 119, 271, 159, 298, 275, 149, 117, 263, 240, 319, 342, 371, 74, 20, 91, 28, 185, 300, 202, 292, 170, 351, 238, 89, 258, 65, 112, 101, 76, 173, 72, 261, 221, 260, 59, 283, 230, 49, 376, 232, 18, 80, 97, 361, 35, 9, 45, 193, 331, 224, 335, 132, 41, 244, 58, 116, 168, 43, 174, 151, 326, 277, 78, 357, 143, 178, 369, 288, 42, 34, 372, 330, 318, 98, 179, 30, 83, 207, 265, 266, 225, 302, 66, 332, 374, 181, 166, 321, 231, 299, 14, 233, 110, 282, 192, 358, 51, 343, 16, 187, 164, 306, 195, 154, 379, 169, 269, 382, 378, 294, 2, 205, 356, 243, 17, 289, 124, 198, 12, 248, 293, 138, 286, 60, 176, 8, 190, 95, 54, 317, 44, 84, 264] + 51: [24, 12, 229, 73, 16, 182, 64, 65, 60, 235, 105, 253, 49, 247, 374, 23, 275, 74, 341, 366, 192, 34, 309, 195, 361, 320, 289, 332, 115, 89, 328, 278, 319, 339, 43, 240, 83, 354, 158, 277, 70, 133, 185, 244, 21, 226, 326, 348, 186, 208, 126, 189, 111, 52, 136, 62, 104, 301, 304, 168, 11, 5, 216, 47, 245, 142, 86, 329, 280, 91, 321, 44, 236, 265, 69, 383, 315, 381, 114, 242, 93, 109, 53, 25, 66, 9, 257, 305, 355, 227, 302, 347, 76, 255, 156, 202, 372, 323, 82, 106, 98, 284, 176, 211, 270, 124, 129, 177, 346, 92, 35, 85, 212, 308, 237, 107, 279, 351, 204, 251, 10, 362, 324, 311, 94, 258, 379, 191, 307, 273, 55, 167, 125, 148, 28, 272, 154, 132, 175, 274, 225, 267, 327, 249, 102, 200, 144, 286, 371, 113, 228, 72, 87, 32, 330, 146, 269, 314, 259, 20, 285, 344, 172, 268, 18, 181, 59, 160, 166, 41, 224, 171, 100, 312, 350, 338, 145, 363, 336, 378, 184, 1, 230, 165, 174, 217, 179, 266, 22, 38, 121, 139, 137, 110, 287, 31, 206, 193, 180, 264, 135, 203, 233, 153, 246, 263, 8, 294, 292, 382, 97, 162, 380, 310, 370, 119, 50, 48, 234, 317, 369, 365, 27, 54, 276, 333, 159, 112, 218, 57, 4, 14, 199, 376, 187, 352, 36, 231, 151, 290, 373, 210, 17, 108, 6, 99, 356, 300, 343, 95, 250, 283, 130, 26, 46, 220, 331, 161, 81, 198, 219, 190, 79, 252, 141, 3, 205, 262, 196, 349, 170, 223, 80, 340, 197, 232, 19, 116, 7, 215, 0, 120, 293, 29, 117, 377, 2, 138, 375, 37, 342, 322, 101, 357, 122, 67, 140, 260, 188, 295, 103, 335, 299, 118, 281, 303, 254, 56, 42, 209, 207, 33, 368, 164, 306, 84, 313, 297, 45, 194, 78, 298, 58, 238, 149, 214, 39, 296, 77, 128, 71, 63, 147, 131, 155, 261, 221, 241, 337, 163, 178, 123, 127, 358, 152, 40, 325, 282, 243, 134, 13, 143, 183, 271, 345, 359, 360, 222, 90, 248, 75, 239, 157, 364, 213, 334, 51, 30, 288, 353, 61, 316, 15, 68, 96, 88, 201, 367, 169, 318, 150, 256, 173, 291] + 52: [381, 209, 121, 372, 130, 289, 345, 82, 41, 33, 26, 269, 349, 50, 325, 379, 222, 105, 227, 23, 134, 146, 301, 331, 213, 333, 326, 268, 58, 110, 59, 152, 318, 249, 143, 342, 114, 4, 353, 276, 297, 203, 159, 142, 317, 199, 204, 176, 99, 239, 92, 217, 151, 323, 34, 298, 382, 60, 44, 168, 252, 98, 88, 133, 221, 191, 281, 160, 116, 280, 3, 154, 279, 208, 45, 225, 2, 277, 244, 21, 139, 347, 303, 197, 111, 96, 358, 363, 9, 185, 202, 144, 373, 264, 212, 180, 334, 336, 327, 216, 63, 214, 206, 77, 183, 68, 80, 192, 54, 354, 37, 171, 378, 5, 296, 30, 233, 292, 361, 319, 39, 287, 40, 93, 201, 177, 294, 189, 179, 100, 356, 322, 226, 311, 181, 112, 36, 187, 19, 15, 86, 272, 370, 247, 102, 137, 52, 332, 31, 73, 321, 193, 184, 190, 140, 196, 210, 236, 70, 312, 285, 286, 315, 124, 248, 369, 72, 17, 374, 337, 306, 308, 89, 242, 282, 84, 220, 129, 188, 118, 344, 313, 229, 302, 145, 255, 65, 122, 240, 360, 162, 348, 107, 103, 25, 231, 267, 362, 290, 211, 78, 346, 357, 219, 355, 95, 257, 123, 256, 234, 341, 223, 364, 300, 76, 53, 69, 66, 27, 161, 352, 383, 20, 238, 51, 136, 28, 310, 340, 343, 293, 147, 132, 314, 265, 338, 14, 295, 16, 305, 157, 283, 48, 307, 320, 246, 195, 263, 7, 172, 245, 259, 266, 8, 291, 108, 339, 166, 83, 173, 75, 243, 113, 377, 170, 324, 109, 119, 270, 200, 365, 207, 230, 330, 101, 380, 18, 126, 304, 275, 158, 42, 273, 241, 1, 376, 46, 175, 71, 97, 186, 61, 182, 85, 174, 163, 13, 62, 260, 56, 87, 149, 309, 228, 74, 117, 359, 167, 367, 6, 153, 351, 316, 55, 125, 235, 57, 258, 148, 194, 47, 198, 49, 141, 43, 299, 135, 232, 261, 79, 11, 366, 254, 94, 218, 375, 104, 165, 205, 120, 371, 250, 271, 169, 90, 288, 10, 128, 32, 64, 35, 155, 127, 262, 178, 215, 29, 67, 328, 115, 22, 91, 253, 350, 237, 284, 224, 251, 150, 368, 156, 278, 81, 335, 138, 274, 329, 131, 12, 0, 24, 164, 106, 38] + 53: [110, 363, 118, 160, 309, 237, 225, 134, 269, 127, 62, 12, 361, 77, 313, 197, 259, 159, 175, 146, 111, 339, 57, 370, 136, 358, 251, 101, 275, 7, 14, 43, 177, 1, 74, 34, 267, 212, 98, 286, 223, 307, 167, 185, 84, 114, 210, 272, 240, 311, 186, 68, 247, 280, 345, 92, 180, 268, 162, 130, 125, 24, 325, 94, 381, 383, 152, 300, 176, 89, 122, 362, 369, 216, 375, 189, 236, 333, 299, 59, 258, 21, 201, 289, 323, 48, 39, 64, 163, 260, 211, 165, 11, 191, 314, 312, 73, 354, 4, 8, 66, 173, 214, 155, 145, 360, 194, 103, 368, 284, 241, 168, 346, 341, 188, 324, 277, 47, 15, 143, 328, 120, 2, 166, 96, 215, 198, 294, 0, 45, 53, 80, 331, 83, 298, 106, 303, 263, 288, 213, 33, 99, 377, 316, 38, 109, 32, 217, 222, 142, 273, 227, 132, 6, 291, 26, 285, 326, 5, 200, 25, 338, 205, 378, 373, 281, 72, 282, 226, 128, 174, 65, 158, 278, 133, 220, 242, 257, 108, 380, 29, 199, 342, 113, 372, 356, 41, 27, 204, 245, 265, 18, 16, 296, 330, 75, 270, 164, 365, 42, 302, 202, 376, 81, 121, 20, 95, 256, 329, 112, 116, 37, 60, 10, 76, 353, 233, 248, 178, 276, 207, 28, 138, 232, 254, 234, 352, 264, 305, 85, 348, 184, 93, 104, 91, 61, 274, 58, 244, 140, 317, 287, 250, 230, 297, 129, 46, 224, 228, 156, 351, 144, 119, 31, 253, 3, 262, 141, 172, 239, 52, 150, 126, 359, 340, 36, 206, 321, 306, 117, 40, 364, 195, 54, 137, 246, 100, 82, 310, 229, 208, 135, 190, 181, 187, 318, 22, 56, 13, 334, 295, 336, 243, 320, 322, 379, 266, 209, 86, 332, 221, 50, 319, 88, 139, 183, 231, 335, 235, 149, 315, 293, 357, 196, 169, 105, 327, 79, 255, 182, 55, 337, 367, 131, 9, 51, 147, 301, 374, 382, 192, 343, 304, 344, 252, 90, 350, 23, 347, 308, 203, 238, 292, 179, 170, 279, 157, 261, 271, 107, 171, 219, 70, 69, 151, 49, 78, 349, 44, 102, 67, 35, 115, 371, 19, 30, 123, 218, 97, 87, 154, 283, 249, 63, 193, 17, 366, 161, 148, 124, 355, 71, 290, 153] + 54: [363, 71, 39, 80, 172, 341, 290, 311, 180, 228, 121, 70, 310, 357, 50, 325, 142, 109, 376, 186, 100, 67, 48, 85, 137, 62, 81, 262, 9, 175, 334, 110, 234, 367, 261, 89, 66, 270, 307, 134, 169, 297, 383, 106, 354, 336, 361, 378, 370, 299, 296, 83, 82, 250, 72, 254, 330, 119, 7, 329, 276, 333, 129, 64, 323, 190, 159, 279, 204, 237, 183, 318, 69, 163, 22, 242, 377, 273, 128, 266, 371, 219, 346, 29, 249, 108, 248, 374, 51, 65, 112, 256, 19, 200, 36, 148, 294, 231, 286, 253, 90, 260, 20, 324, 93, 57, 117, 86, 16, 132, 47, 32, 322, 91, 185, 272, 239, 184, 365, 302, 278, 264, 301, 136, 96, 33, 347, 191, 351, 12, 88, 145, 236, 274, 343, 362, 149, 35, 104, 252, 37, 342, 123, 13, 339, 223, 280, 380, 147, 257, 98, 306, 208, 305, 309, 3, 27, 156, 41, 196, 158, 17, 321, 182, 24, 21, 312, 49, 1, 366, 293, 107, 304, 173, 18, 300, 194, 229, 213, 6, 178, 233, 79, 60, 199, 116, 210, 188, 222, 349, 127, 160, 155, 356, 230, 153, 338, 150, 30, 281, 282, 221, 25, 314, 101, 332, 99, 218, 277, 225, 265, 92, 382, 157, 105, 135, 177, 373, 327, 122, 179, 162, 151, 316, 245, 243, 259, 235, 247, 331, 268, 46, 226, 154, 4, 77, 126, 78, 202, 232, 164, 11, 38, 337, 189, 216, 133, 174, 120, 187, 26, 118, 181, 375, 76, 197, 198, 335, 220, 152, 54, 381, 55, 368, 61, 144, 326, 111, 146, 167, 166, 23, 141, 251, 308, 59, 168, 289, 359, 102, 227, 292, 28, 138, 165, 193, 358, 320, 284, 258, 348, 295, 328, 287, 369, 53, 44, 345, 352, 372, 58, 10, 143, 113, 215, 45, 5, 217, 103, 140, 97, 315, 73, 171, 255, 313, 364, 353, 244, 43, 238, 271, 15, 224, 14, 31, 269, 203, 56, 360, 350, 291, 207, 340, 130, 205, 283, 42, 240, 95, 319, 267, 214, 8, 176, 87, 40, 75, 317, 288, 115, 161, 84, 124, 94, 34, 125, 170, 355, 131, 246, 298, 68, 209, 201, 114, 195, 275, 139, 192, 63, 74, 211, 206, 52, 263, 285, 303, 379, 2, 241, 344, 212, 0] + 55: [154, 323, 113, 256, 62, 39, 16, 41, 121, 106, 249, 71, 272, 300, 316, 233, 197, 276, 95, 260, 231, 343, 194, 136, 318, 157, 207, 313, 63, 160, 127, 173, 356, 321, 168, 315, 66, 68, 280, 169, 330, 362, 100, 345, 205, 222, 245, 109, 174, 90, 269, 43, 151, 89, 252, 353, 247, 40, 341, 176, 320, 164, 86, 239, 5, 325, 105, 378, 377, 47, 54, 241, 122, 254, 193, 22, 117, 232, 133, 208, 372, 336, 55, 147, 145, 261, 77, 376, 334, 75, 195, 351, 292, 144, 196, 215, 56, 80, 74, 326, 270, 309, 357, 307, 73, 78, 132, 223, 226, 60, 138, 26, 156, 112, 350, 190, 217, 236, 240, 228, 140, 346, 358, 278, 294, 302, 342, 188, 373, 359, 118, 38, 354, 374, 139, 203, 191, 155, 266, 158, 24, 25, 250, 204, 202, 116, 347, 115, 327, 235, 370, 227, 6, 70, 301, 134, 279, 44, 368, 271, 206, 163, 348, 375, 251, 380, 360, 187, 322, 257, 171, 52, 314, 214, 1, 365, 15, 335, 35, 243, 58, 107, 177, 369, 295, 175, 32, 108, 59, 379, 96, 317, 88, 340, 48, 76, 152, 4, 218, 192, 267, 363, 65, 99, 8, 331, 213, 0, 344, 46, 170, 289, 371, 246, 79, 53, 19, 119, 287, 101, 149, 82, 198, 103, 37, 30, 93, 209, 120, 125, 248, 162, 364, 21, 36, 288, 148, 167, 51, 34, 81, 308, 299, 29, 28, 355, 339, 311, 211, 273, 291, 200, 179, 349, 290, 383, 124, 17, 284, 91, 210, 265, 306, 286, 332, 277, 23, 84, 87, 264, 61, 367, 219, 253, 126, 104, 338, 150, 324, 183, 92, 262, 57, 142, 131, 9, 283, 69, 98, 146, 381, 130, 159, 7, 182, 111, 303, 382, 199, 293, 3, 333, 216, 366, 172, 259, 102, 274, 27, 224, 42, 135, 263, 184, 128, 85, 296, 31, 237, 281, 225, 268, 319, 137, 129, 275, 13, 166, 298, 181, 110, 220, 18, 229, 310, 305, 20, 11, 123, 180, 72, 234, 165, 238, 328, 304, 49, 2, 114, 12, 221, 312, 337, 189, 14, 352, 329, 361, 67, 178, 185, 10, 255, 94, 33, 153, 212, 258, 143, 97, 201, 297, 161, 50, 64, 242, 141, 282, 244, 83, 230, 45, 186, 285] + 56: [231, 340, 100, 199, 98, 371, 20, 333, 328, 316, 275, 66, 159, 150, 383, 0, 58, 40, 253, 135, 295, 166, 355, 110, 255, 270, 286, 115, 122, 134, 145, 347, 323, 274, 37, 16, 70, 93, 254, 272, 239, 261, 36, 25, 247, 142, 146, 3, 240, 225, 304, 167, 186, 158, 156, 89, 306, 46, 99, 18, 327, 245, 101, 223, 233, 376, 148, 10, 21, 79, 268, 280, 133, 164, 227, 368, 95, 94, 54, 341, 290, 200, 276, 372, 144, 130, 47, 337, 176, 349, 366, 111, 171, 301, 173, 90, 195, 15, 75, 343, 116, 184, 169, 236, 125, 161, 48, 2, 19, 288, 244, 97, 344, 334, 342, 278, 92, 252, 230, 121, 34, 153, 209, 297, 190, 348, 180, 314, 132, 293, 319, 65, 29, 86, 113, 131, 345, 203, 370, 377, 114, 237, 74, 85, 260, 213, 5, 311, 107, 296, 87, 196, 187, 6, 39, 219, 332, 14, 283, 309, 197, 73, 38, 137, 181, 31, 374, 331, 50, 33, 123, 282, 339, 299, 183, 262, 228, 28, 330, 289, 67, 352, 287, 157, 382, 212, 52, 7, 277, 91, 102, 143, 220, 82, 30, 8, 273, 88, 351, 356, 264, 162, 71, 292, 329, 381, 168, 120, 205, 27, 285, 250, 206, 198, 179, 12, 1, 17, 127, 56, 221, 201, 257, 84, 353, 124, 379, 367, 78, 43, 373, 258, 26, 325, 335, 216, 174, 165, 229, 208, 294, 178, 259, 177, 81, 163, 322, 249, 104, 117, 140, 302, 362, 154, 192, 72, 246, 300, 160, 193, 324, 338, 23, 22, 11, 13, 243, 364, 313, 360, 298, 119, 172, 307, 175, 57, 64, 350, 60, 152, 108, 358, 336, 217, 194, 235, 76, 224, 321, 44, 106, 279, 126, 53, 303, 9, 263, 308, 346, 41, 83, 77, 357, 118, 238, 103, 182, 312, 105, 305, 354, 317, 214, 151, 141, 129, 42, 62, 210, 218, 310, 4, 226, 139, 266, 361, 222, 204, 234, 215, 326, 45, 365, 318, 109, 315, 242, 265, 241, 147, 191, 155, 267, 189, 363, 251, 320, 284, 188, 80, 63, 207, 369, 359, 69, 281, 128, 136, 35, 269, 149, 138, 185, 248, 378, 271, 55, 96, 375, 112, 232, 291, 49, 170, 24, 211, 256, 68, 59, 32, 380, 51, 61, 202] + 57: [254, 125, 159, 121, 198, 257, 324, 267, 6, 283, 160, 163, 238, 91, 172, 213, 214, 113, 312, 111, 38, 55, 328, 226, 352, 209, 28, 132, 29, 237, 49, 211, 200, 168, 219, 256, 239, 78, 308, 258, 82, 221, 77, 153, 202, 262, 301, 304, 276, 148, 170, 342, 314, 7, 128, 53, 118, 150, 197, 88, 62, 272, 167, 373, 40, 51, 249, 356, 102, 203, 106, 95, 210, 196, 282, 155, 186, 162, 261, 315, 236, 255, 357, 333, 361, 370, 232, 10, 264, 206, 278, 227, 280, 367, 275, 343, 326, 205, 72, 93, 158, 63, 65, 124, 268, 350, 318, 79, 123, 182, 99, 253, 322, 228, 70, 83, 21, 183, 284, 13, 279, 171, 337, 90, 330, 18, 371, 97, 33, 59, 0, 32, 109, 194, 48, 364, 271, 266, 52, 327, 181, 15, 229, 372, 25, 187, 320, 11, 16, 368, 235, 137, 344, 169, 117, 64, 44, 354, 58, 39, 346, 73, 27, 298, 184, 147, 12, 380, 2, 164, 199, 362, 178, 215, 240, 145, 252, 24, 270, 126, 66, 36, 374, 139, 61, 115, 291, 292, 305, 34, 105, 376, 231, 246, 286, 157, 133, 156, 101, 274, 8, 204, 151, 22, 35, 251, 347, 161, 179, 297, 42, 46, 349, 92, 358, 112, 329, 313, 190, 321, 98, 334, 290, 247, 5, 265, 307, 281, 263, 50, 192, 76, 273, 218, 114, 340, 69, 245, 285, 56, 14, 89, 94, 154, 381, 57, 104, 359, 335, 300, 127, 317, 306, 80, 338, 316, 110, 9, 177, 277, 191, 54, 47, 119, 348, 71, 351, 369, 288, 17, 379, 363, 45, 303, 378, 87, 224, 242, 67, 103, 142, 244, 129, 189, 336, 201, 233, 293, 146, 165, 207, 302, 31, 220, 140, 223, 130, 60, 174, 345, 185, 75, 319, 43, 176, 341, 152, 20, 382, 116, 120, 225, 68, 136, 3, 296, 81, 311, 41, 332, 122, 135, 299, 241, 1, 222, 138, 107, 310, 100, 212, 193, 30, 37, 19, 86, 259, 295, 331, 74, 230, 85, 366, 108, 141, 217, 84, 180, 309, 250, 144, 365, 134, 243, 96, 173, 377, 208, 289, 325, 166, 149, 353, 23, 216, 323, 175, 26, 355, 248, 4, 188, 383, 260, 375, 287, 360, 339, 294, 269, 195, 131, 143, 234] + 58: [377, 169, 232, 324, 367, 132, 4, 190, 198, 229, 55, 239, 129, 236, 160, 183, 149, 362, 379, 334, 347, 113, 195, 8, 64, 243, 372, 330, 354, 374, 223, 109, 34, 15, 301, 91, 361, 279, 321, 168, 201, 340, 33, 38, 58, 134, 209, 308, 220, 114, 61, 27, 373, 9, 351, 256, 112, 376, 85, 42, 130, 162, 66, 185, 48, 202, 383, 284, 350, 326, 37, 0, 144, 148, 123, 345, 19, 35, 237, 170, 294, 87, 317, 41, 254, 247, 117, 145, 17, 30, 140, 89, 147, 292, 184, 204, 81, 194, 298, 76, 348, 101, 49, 67, 199, 368, 295, 342, 119, 104, 111, 307, 328, 380, 314, 207, 181, 238, 227, 346, 135, 172, 176, 288, 2, 287, 50, 133, 118, 5, 138, 221, 303, 103, 44, 349, 137, 52, 127, 218, 233, 158, 309, 280, 245, 98, 311, 263, 7, 344, 93, 69, 355, 116, 68, 6, 203, 315, 316, 20, 28, 281, 375, 82, 99, 215, 155, 382, 332, 13, 253, 161, 371, 293, 179, 136, 226, 24, 142, 359, 157, 336, 269, 120, 153, 78, 188, 323, 23, 320, 335, 364, 156, 92, 122, 248, 356, 210, 322, 22, 214, 178, 262, 47, 31, 12, 255, 197, 171, 1, 331, 143, 258, 306, 234, 378, 63, 302, 154, 107, 228, 265, 283, 94, 230, 296, 100, 54, 163, 146, 46, 369, 216, 88, 267, 343, 165, 80, 3, 370, 275, 205, 312, 249, 273, 211, 235, 72, 257, 36, 196, 141, 191, 97, 60, 242, 224, 192, 139, 59, 62, 53, 250, 240, 131, 208, 357, 278, 21, 11, 182, 105, 180, 102, 360, 86, 268, 200, 51, 96, 159, 193, 365, 363, 212, 164, 71, 10, 126, 305, 222, 77, 79, 271, 206, 358, 26, 40, 152, 341, 189, 277, 260, 352, 73, 187, 381, 244, 325, 83, 339, 75, 121, 300, 231, 65, 318, 115, 353, 219, 297, 213, 29, 128, 276, 290, 84, 39, 246, 286, 74, 217, 291, 166, 125, 108, 56, 366, 177, 151, 259, 14, 299, 289, 270, 175, 45, 18, 16, 272, 106, 274, 285, 329, 251, 25, 266, 90, 124, 333, 110, 241, 186, 327, 43, 70, 225, 173, 338, 261, 95, 264, 282, 337, 167, 57, 32, 304, 174, 310, 313, 252, 319, 150] + 59: [327, 220, 113, 105, 226, 374, 291, 172, 328, 151, 281, 290, 45, 40, 16, 181, 162, 315, 29, 47, 355, 348, 366, 6, 353, 199, 107, 333, 246, 34, 84, 330, 359, 44, 183, 53, 166, 303, 8, 141, 350, 375, 347, 345, 167, 4, 90, 189, 25, 260, 346, 182, 97, 251, 371, 150, 213, 295, 144, 196, 86, 176, 160, 279, 297, 248, 252, 245, 10, 236, 344, 238, 13, 228, 156, 48, 71, 27, 208, 134, 157, 93, 49, 24, 118, 296, 82, 165, 240, 14, 293, 87, 78, 72, 235, 154, 170, 202, 66, 33, 313, 70, 263, 130, 185, 324, 80, 255, 58, 212, 81, 35, 302, 163, 376, 338, 214, 158, 137, 92, 337, 123, 314, 32, 287, 41, 135, 184, 17, 326, 336, 275, 273, 307, 368, 319, 1, 56, 77, 171, 83, 99, 308, 215, 229, 195, 340, 73, 285, 5, 298, 288, 300, 186, 262, 382, 342, 109, 223, 254, 280, 334, 22, 60, 286, 258, 146, 369, 365, 2, 61, 194, 138, 43, 50, 124, 28, 74, 88, 249, 148, 102, 241, 237, 318, 360, 272, 244, 104, 122, 310, 271, 7, 94, 173, 332, 30, 147, 247, 331, 31, 372, 26, 266, 133, 175, 161, 12, 100, 169, 143, 19, 306, 69, 120, 354, 203, 51, 68, 299, 193, 63, 187, 217, 21, 89, 261, 115, 201, 230, 312, 108, 239, 192, 335, 378, 126, 323, 111, 268, 140, 370, 59, 234, 46, 95, 381, 294, 18, 9, 23, 243, 112, 91, 57, 127, 267, 383, 20, 218, 356, 179, 180, 177, 36, 101, 242, 0, 206, 64, 136, 253, 207, 153, 132, 210, 357, 103, 358, 98, 316, 305, 39, 264, 55, 190, 15, 341, 209, 379, 200, 65, 75, 233, 311, 76, 42, 38, 178, 309, 114, 278, 85, 159, 364, 320, 373, 142, 329, 339, 198, 361, 155, 131, 274, 362, 380, 110, 325, 231, 67, 145, 277, 191, 321, 284, 216, 257, 276, 219, 121, 367, 139, 116, 117, 79, 224, 250, 363, 352, 256, 197, 204, 221, 265, 377, 317, 232, 128, 164, 304, 168, 211, 62, 225, 174, 54, 222, 269, 259, 289, 349, 96, 292, 227, 149, 129, 322, 343, 37, 3, 106, 11, 119, 283, 301, 282, 125, 270, 205, 152, 52, 351, 188] + 60: [313, 94, 195, 372, 78, 65, 208, 239, 49, 166, 98, 272, 59, 27, 169, 151, 20, 6, 240, 332, 110, 215, 116, 186, 90, 85, 146, 182, 95, 219, 225, 338, 282, 361, 328, 258, 145, 356, 291, 72, 43, 289, 340, 10, 218, 214, 288, 201, 124, 174, 335, 129, 339, 230, 185, 74, 294, 180, 329, 278, 231, 238, 99, 336, 255, 269, 183, 11, 237, 274, 25, 134, 142, 293, 196, 300, 322, 256, 64, 197, 168, 13, 209, 179, 42, 204, 96, 86, 135, 367, 32, 44, 242, 154, 375, 355, 351, 83, 310, 170, 244, 212, 312, 81, 34, 319, 119, 15, 131, 161, 241, 253, 0, 277, 37, 1, 188, 264, 377, 304, 21, 107, 66, 7, 192, 370, 286, 18, 325, 270, 45, 228, 216, 50, 68, 97, 159, 254, 163, 4, 101, 308, 317, 22, 123, 60, 265, 128, 303, 316, 247, 297, 205, 76, 365, 345, 245, 143, 263, 359, 84, 283, 132, 318, 80, 267, 57, 342, 233, 70, 187, 30, 369, 314, 380, 148, 363, 376, 127, 287, 261, 224, 160, 147, 165, 281, 164, 103, 118, 89, 62, 299, 257, 139, 40, 121, 243, 113, 194, 334, 2, 108, 353, 193, 213, 117, 235, 246, 75, 58, 221, 36, 344, 9, 3, 279, 26, 346, 31, 200, 100, 357, 276, 12, 315, 307, 262, 330, 19, 198, 374, 378, 301, 306, 292, 177, 73, 77, 210, 207, 16, 47, 199, 236, 266, 39, 167, 302, 28, 35, 290, 311, 206, 184, 271, 364, 152, 69, 114, 51, 92, 162, 38, 8, 323, 52, 273, 33, 190, 106, 296, 14, 125, 105, 202, 252, 320, 280, 379, 29, 175, 326, 173, 138, 352, 87, 373, 348, 268, 220, 126, 284, 260, 343, 48, 153, 181, 327, 234, 112, 354, 232, 203, 55, 172, 189, 248, 93, 217, 88, 382, 176, 56, 141, 360, 91, 149, 341, 349, 144, 331, 383, 67, 23, 178, 137, 41, 211, 111, 191, 350, 71, 275, 321, 136, 157, 381, 158, 133, 102, 115, 347, 222, 120, 155, 366, 337, 46, 309, 122, 223, 82, 140, 150, 362, 358, 259, 24, 5, 61, 305, 171, 53, 285, 250, 130, 79, 368, 371, 333, 156, 251, 324, 54, 104, 229, 298, 249, 17, 227, 295, 109, 226, 63] + 61: [221, 248, 107, 360, 247, 241, 363, 330, 278, 235, 129, 115, 159, 32, 43, 348, 233, 44, 190, 47, 336, 207, 202, 139, 292, 8, 365, 225, 67, 71, 342, 193, 311, 163, 364, 312, 13, 314, 223, 236, 56, 281, 134, 41, 16, 356, 94, 58, 127, 167, 88, 120, 326, 270, 45, 12, 51, 237, 112, 110, 15, 169, 337, 224, 77, 83, 82, 109, 206, 145, 33, 72, 78, 275, 125, 269, 295, 124, 204, 298, 91, 239, 101, 74, 201, 272, 138, 250, 60, 226, 210, 50, 40, 128, 319, 0, 179, 100, 161, 230, 170, 323, 59, 253, 372, 142, 119, 333, 42, 156, 75, 258, 297, 29, 27, 379, 308, 368, 200, 259, 38, 273, 37, 126, 240, 317, 332, 152, 274, 25, 255, 358, 24, 293, 28, 339, 220, 285, 131, 267, 325, 296, 343, 208, 338, 36, 307, 172, 157, 178, 209, 103, 17, 215, 66, 57, 188, 243, 133, 361, 65, 84, 166, 11, 257, 23, 147, 173, 383, 214, 9, 79, 196, 132, 194, 106, 244, 271, 6, 99, 262, 305, 212, 105, 347, 377, 175, 183, 320, 229, 189, 53, 61, 381, 324, 86, 335, 205, 10, 184, 353, 238, 55, 327, 34, 349, 309, 228, 20, 316, 300, 113, 2, 260, 328, 290, 154, 137, 280, 242, 283, 340, 199, 359, 70, 130, 354, 123, 251, 185, 373, 265, 35, 222, 279, 289, 367, 334, 350, 155, 73, 197, 344, 231, 5, 351, 19, 1, 195, 371, 143, 288, 168, 286, 227, 261, 191, 268, 366, 313, 304, 3, 52, 102, 186, 153, 306, 341, 85, 141, 176, 14, 162, 352, 187, 18, 7, 111, 164, 48, 256, 64, 277, 382, 76, 217, 96, 321, 93, 46, 263, 216, 108, 165, 203, 264, 218, 294, 213, 192, 369, 31, 282, 87, 362, 90, 114, 252, 329, 69, 104, 249, 322, 89, 375, 22, 219, 81, 144, 284, 370, 345, 54, 301, 49, 331, 180, 146, 140, 276, 151, 355, 376, 266, 171, 287, 211, 299, 315, 303, 136, 122, 117, 380, 21, 68, 198, 291, 177, 181, 160, 92, 118, 150, 135, 121, 374, 245, 97, 158, 378, 346, 30, 174, 80, 26, 4, 98, 148, 63, 310, 234, 232, 246, 95, 182, 318, 302, 254, 39, 62, 357, 116, 149] +layer_updates_per_iter: 0 +num_slots: 384 diff --git a/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p2d-dep8-dep8-b4-eplb384-mtp3.yaml b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p2d-dep8-dep8-b4-eplb384-mtp3.yaml new file mode 100644 index 0000000000..9989de245e --- /dev/null +++ b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p2d-dep8-dep8-b4-eplb384-mtp3.yaml @@ -0,0 +1,123 @@ +name: disagg-b200-8k1k-1p2d-dep8-dep8-b4-eplb384-mtp3 +model: + path: deepseek-v4-pro + container: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23 + precision: fp4 +dynamo: + install: true + wheel: "1.4.0.dev20260730" + request_plane: tcp +resources: + gpu_type: b200 + prefill_nodes: 1 + prefill_workers: 1 + gpus_per_prefill: 8 + decode_nodes: 2 + decode_workers: 2 + gpus_per_decode: 8 + gpus_per_node: 8 +backend: + type: trtllm + prefill_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True + TLLM_PROFILE_LOG_RANKS: all + TLLM_SPEC_DECODE_FORCE_NUM_ACCEPTED_TOKENS: '1.82' + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + decode_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + TLLM_PROFILE_LOG_RANKS: all + TLLM_SPEC_DECODE_FORCE_NUM_ACCEPTED_TOKENS: '1.82' + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + trtllm_config: + prefill: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + disable_overlap_scheduler: true + enable_attention_dp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.5 + tokens_per_block: 128 + max_batch_size: 2 + max_num_tokens: 8192 + max_seq_len: 8232 + moe_config: + backend: TRTLLM + load_balancer: /configs/moe_load_balancer_ctx_ep4_384.yaml + moe_expert_parallel_size: 8 + pipeline_parallel_size: 1 + print_iter_log: true + speculative_config: + decoding_type: MTP + max_draft_len: 3 + tensor_parallel_size: 8 + decode: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + batch_sizes: + - 1 + - 2 + - 4 + enable_padding: true + enable_attention_dp: true + enable_lm_head_tp_in_adp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.8 + tokens_per_block: 128 + max_batch_size: 4 + max_num_tokens: 16 + max_seq_len: 9256 + moe_config: + backend: TRTLLM + load_balancer: /configs/moe_load_balancer_gen_ep8_slots384.yaml + use_low_precision_moe_combine: true + moe_expert_parallel_size: 8 + num_postprocess_workers: 4 + pipeline_parallel_size: 1 + print_iter_log: true + speculative_config: + decoding_type: MTP + max_draft_len: 3 + stream_interval: 100 + tensor_parallel_size: 8 +benchmark: + type: sa-bench + isl: 8192 + osl: 1024 + concurrencies: "64" + req_rate: inf + random_range_ratio: 0.8 + use_chat_template: true + custom_tokenizer: "sa_bench_tokenizers.sglang_deepseek_v4.SGLangDeepseekV4Tokenizer" +frontend: + type: dynamo + enable_multiple_frontends: false +health_check: + max_attempts: 540 + interval_seconds: 10 +environment: + TRTLLM_SERVER_DISABLE_GC: '1' diff --git a/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p3d-dep8-dep8-b8-eplb384-mtp0.yaml b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p3d-dep8-dep8-b8-eplb384-mtp0.yaml new file mode 100644 index 0000000000..6829961d4f --- /dev/null +++ b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p3d-dep8-dep8-b8-eplb384-mtp0.yaml @@ -0,0 +1,116 @@ +name: disagg-b200-8k1k-1p3d-dep8-dep8-b8-eplb384-mtp0 +model: + path: deepseek-v4-pro + container: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23 + precision: fp4 +dynamo: + install: true + wheel: "1.4.0.dev20260730" + request_plane: tcp +resources: + gpu_type: b200 + prefill_nodes: 1 + prefill_workers: 1 + gpus_per_prefill: 8 + decode_nodes: 3 + decode_workers: 3 + gpus_per_decode: 8 + gpus_per_node: 8 +backend: + type: trtllm + prefill_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True + TLLM_PROFILE_LOG_RANKS: all + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + decode_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + TLLM_PROFILE_LOG_RANKS: all + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + trtllm_config: + prefill: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + disable_overlap_scheduler: true + enable_attention_dp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.5 + tokens_per_block: 128 + max_batch_size: 2 + max_num_tokens: 8192 + max_seq_len: 8232 + moe_config: + backend: TRTLLM + load_balancer: /configs/moe_load_balancer_ctx_ep4_384.yaml + moe_expert_parallel_size: 8 + pipeline_parallel_size: 1 + print_iter_log: true + tensor_parallel_size: 8 + decode: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + batch_sizes: + - 1 + - 2 + - 4 + - 8 + enable_padding: true + enable_attention_dp: true + enable_lm_head_tp_in_adp: false + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.8 + tokens_per_block: 128 + max_batch_size: 8 + max_num_tokens: 8 + max_seq_len: 9256 + moe_config: + backend: TRTLLM + load_balancer: /configs/moe_load_balancer_gen_ep8_slots384.yaml + use_low_precision_moe_combine: true + moe_expert_parallel_size: 8 + num_postprocess_workers: 4 + pipeline_parallel_size: 1 + print_iter_log: true + stream_interval: 100 + tensor_parallel_size: 8 +benchmark: + type: sa-bench + isl: 8192 + osl: 1024 + concurrencies: "192" + req_rate: inf + random_range_ratio: 0.8 + use_chat_template: true + custom_tokenizer: "sa_bench_tokenizers.sglang_deepseek_v4.SGLangDeepseekV4Tokenizer" +frontend: + type: dynamo + enable_multiple_frontends: false +health_check: + max_attempts: 540 + interval_seconds: 10 +environment: + TRTLLM_SERVER_DISABLE_GC: '1' diff --git a/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p4d-dep8-dep8-b2-eplb384-mtp3.yaml b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p4d-dep8-dep8-b2-eplb384-mtp3.yaml new file mode 100644 index 0000000000..093617abb6 --- /dev/null +++ b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p4d-dep8-dep8-b2-eplb384-mtp3.yaml @@ -0,0 +1,123 @@ +name: disagg-b200-8k1k-1p4d-dep8-dep8-b2-eplb384-mtp3 +model: + path: deepseek-v4-pro + container: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23 + precision: fp4 +dynamo: + install: true + wheel: "1.4.0.dev20260730" + request_plane: tcp +resources: + gpu_type: b200 + prefill_nodes: 1 + prefill_workers: 1 + gpus_per_prefill: 8 + decode_nodes: 4 + decode_workers: 4 + gpus_per_decode: 8 + gpus_per_node: 8 +backend: + type: trtllm + prefill_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True + TLLM_PROFILE_LOG_RANKS: all + TLLM_SPEC_DECODE_FORCE_NUM_ACCEPTED_TOKENS: '1.82' + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + decode_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + TLLM_PROFILE_LOG_RANKS: all + TLLM_SPEC_DECODE_FORCE_NUM_ACCEPTED_TOKENS: '1.82' + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + trtllm_config: + prefill: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + disable_overlap_scheduler: true + enable_attention_dp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.5 + tokens_per_block: 128 + max_batch_size: 2 + max_num_tokens: 8192 + max_seq_len: 8232 + moe_config: + backend: TRTLLM + load_balancer: /configs/moe_load_balancer_ctx_ep4_384.yaml + moe_expert_parallel_size: 8 + pipeline_parallel_size: 1 + print_iter_log: true + speculative_config: + decoding_type: MTP + max_draft_len: 3 + tensor_parallel_size: 8 + decode: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + batch_sizes: + - 1 + - 2 + - 4 + enable_padding: true + enable_attention_dp: true + enable_lm_head_tp_in_adp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.8 + tokens_per_block: 128 + max_batch_size: 2 + max_num_tokens: 8 + max_seq_len: 9256 + moe_config: + backend: TRTLLM + load_balancer: /configs/moe_load_balancer_gen_ep8_slots384.yaml + use_low_precision_moe_combine: true + moe_expert_parallel_size: 8 + num_postprocess_workers: 4 + pipeline_parallel_size: 1 + print_iter_log: true + speculative_config: + decoding_type: MTP + max_draft_len: 3 + stream_interval: 100 + tensor_parallel_size: 8 +benchmark: + type: sa-bench + isl: 8192 + osl: 1024 + concurrencies: "64" + req_rate: inf + random_range_ratio: 0.8 + use_chat_template: true + custom_tokenizer: "sa_bench_tokenizers.sglang_deepseek_v4.SGLangDeepseekV4Tokenizer" +frontend: + type: dynamo + enable_multiple_frontends: false +health_check: + max_attempts: 540 + interval_seconds: 10 +environment: + TRTLLM_SERVER_DISABLE_GC: '1' diff --git a/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p4d-dep8-tep8-b4-mtp0.yaml b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p4d-dep8-tep8-b4-mtp0.yaml new file mode 100644 index 0000000000..ea38b0c074 --- /dev/null +++ b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p4d-dep8-tep8-b4-mtp0.yaml @@ -0,0 +1,113 @@ +name: disagg-b200-8k1k-1p4d-dep8-tep8-b4-mtp0 +model: + path: deepseek-v4-pro + container: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23 + precision: fp4 +dynamo: + install: true + wheel: "1.4.0.dev20260730" + request_plane: tcp +resources: + gpu_type: b200 + prefill_nodes: 1 + prefill_workers: 1 + gpus_per_prefill: 8 + decode_nodes: 4 + decode_workers: 4 + gpus_per_decode: 8 + gpus_per_node: 8 +backend: + type: trtllm + prefill_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True + TLLM_PROFILE_LOG_RANKS: all + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + decode_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + TLLM_PROFILE_LOG_RANKS: all + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + trtllm_config: + prefill: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + disable_overlap_scheduler: true + enable_attention_dp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.5 + tokens_per_block: 128 + max_batch_size: 2 + max_num_tokens: 8192 + max_seq_len: 8232 + moe_config: + backend: TRTLLM + moe_expert_parallel_size: 8 + pipeline_parallel_size: 1 + print_iter_log: true + tensor_parallel_size: 8 + decode: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + batch_sizes: + - 1 + - 2 + - 4 + enable_padding: true + enable_attention_dp: false + enable_lm_head_tp_in_adp: false + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.9 + tokens_per_block: 128 + max_batch_size: 4 + max_num_tokens: 4 + max_seq_len: 9256 + moe_config: + backend: TRTLLM + use_low_precision_moe_combine: true + moe_expert_parallel_size: 8 + num_postprocess_workers: 4 + pipeline_parallel_size: 1 + print_iter_log: true + stream_interval: 100 + tensor_parallel_size: 8 +benchmark: + type: sa-bench + isl: 8192 + osl: 1024 + concurrencies: "16" + req_rate: inf + random_range_ratio: 0.8 + use_chat_template: true + custom_tokenizer: "sa_bench_tokenizers.sglang_deepseek_v4.SGLangDeepseekV4Tokenizer" +frontend: + type: dynamo + enable_multiple_frontends: false +health_check: + max_attempts: 540 + interval_seconds: 10 +environment: + TRTLLM_SERVER_DISABLE_GC: '1' diff --git a/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p4d-dep8-tep8-b4-mtp3.yaml b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p4d-dep8-tep8-b4-mtp3.yaml new file mode 100644 index 0000000000..1b6d30119c --- /dev/null +++ b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p4d-dep8-tep8-b4-mtp3.yaml @@ -0,0 +1,121 @@ +name: disagg-b200-8k1k-1p4d-dep8-tep8-b4-mtp3 +model: + path: deepseek-v4-pro + container: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23 + precision: fp4 +dynamo: + install: true + wheel: "1.4.0.dev20260730" + request_plane: tcp +resources: + gpu_type: b200 + prefill_nodes: 1 + prefill_workers: 1 + gpus_per_prefill: 8 + decode_nodes: 4 + decode_workers: 4 + gpus_per_decode: 8 + gpus_per_node: 8 +backend: + type: trtllm + prefill_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True + TLLM_PROFILE_LOG_RANKS: all + TLLM_SPEC_DECODE_FORCE_NUM_ACCEPTED_TOKENS: '1.82' + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + decode_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + TLLM_PROFILE_LOG_RANKS: all + TLLM_SPEC_DECODE_FORCE_NUM_ACCEPTED_TOKENS: '1.82' + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + trtllm_config: + prefill: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + disable_overlap_scheduler: true + enable_attention_dp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.5 + tokens_per_block: 128 + max_batch_size: 2 + max_num_tokens: 8192 + max_seq_len: 8232 + moe_config: + backend: TRTLLM + moe_expert_parallel_size: 8 + pipeline_parallel_size: 1 + print_iter_log: true + speculative_config: + decoding_type: MTP + max_draft_len: 3 + tensor_parallel_size: 8 + decode: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + batch_sizes: + - 1 + - 2 + - 4 + enable_padding: true + enable_attention_dp: false + enable_lm_head_tp_in_adp: false + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.9 + tokens_per_block: 128 + max_batch_size: 4 + max_num_tokens: 16 + max_seq_len: 9256 + moe_config: + backend: TRTLLM + use_low_precision_moe_combine: true + moe_expert_parallel_size: 8 + num_postprocess_workers: 4 + pipeline_parallel_size: 1 + print_iter_log: true + speculative_config: + decoding_type: MTP + max_draft_len: 3 + stream_interval: 100 + tensor_parallel_size: 8 +benchmark: + type: sa-bench + isl: 8192 + osl: 1024 + concurrencies: "16" + req_rate: inf + random_range_ratio: 0.8 + use_chat_template: true + custom_tokenizer: "sa_bench_tokenizers.sglang_deepseek_v4.SGLangDeepseekV4Tokenizer" +frontend: + type: dynamo + enable_multiple_frontends: false +health_check: + max_attempts: 540 + interval_seconds: 10 +environment: + TRTLLM_SERVER_DISABLE_GC: '1' diff --git a/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p5d-dep8-tep8-b32-mtp0.yaml b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p5d-dep8-tep8-b32-mtp0.yaml new file mode 100644 index 0000000000..4a4a0db9f7 --- /dev/null +++ b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p5d-dep8-tep8-b32-mtp0.yaml @@ -0,0 +1,117 @@ +name: disagg-b200-8k1k-1p5d-dep8-tep8-b32-mtp0 +model: + path: deepseek-v4-pro + container: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23 + precision: fp4 +dynamo: + install: true + wheel: "1.4.0.dev20260730" + request_plane: tcp +resources: + gpu_type: b200 + prefill_nodes: 1 + prefill_workers: 1 + gpus_per_prefill: 8 + decode_nodes: 5 + decode_workers: 5 + gpus_per_decode: 8 + gpus_per_node: 8 +backend: + type: trtllm + prefill_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True + TLLM_PROFILE_LOG_RANKS: all + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + decode_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + TLLM_PROFILE_LOG_RANKS: all + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + trtllm_config: + prefill: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + disable_overlap_scheduler: true + enable_attention_dp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.5 + tokens_per_block: 128 + max_batch_size: 2 + max_num_tokens: 8192 + max_seq_len: 8232 + moe_config: + backend: TRTLLM + moe_expert_parallel_size: 8 + pipeline_parallel_size: 1 + print_iter_log: true + tensor_parallel_size: 8 + decode: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + batch_sizes: + - 1 + - 2 + - 4 + - 8 + - 16 + - 24 + - 32 + enable_padding: true + enable_attention_dp: false + enable_lm_head_tp_in_adp: false + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.9 + tokens_per_block: 128 + max_batch_size: 32 + max_num_tokens: 32 + max_seq_len: 9256 + moe_config: + backend: TRTLLM + use_low_precision_moe_combine: true + moe_expert_parallel_size: 8 + num_postprocess_workers: 4 + pipeline_parallel_size: 1 + print_iter_log: true + stream_interval: 100 + tensor_parallel_size: 8 +benchmark: + type: sa-bench + isl: 8192 + osl: 1024 + concurrencies: "40" + req_rate: inf + random_range_ratio: 0.8 + use_chat_template: true + custom_tokenizer: "sa_bench_tokenizers.sglang_deepseek_v4.SGLangDeepseekV4Tokenizer" +frontend: + type: dynamo + enable_multiple_frontends: false +health_check: + max_attempts: 540 + interval_seconds: 10 +environment: + TRTLLM_SERVER_DISABLE_GC: '1' diff --git a/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p5d-dep8-tep8-b8-mtp3.yaml b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p5d-dep8-tep8-b8-mtp3.yaml new file mode 100644 index 0000000000..1588418d9a --- /dev/null +++ b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p5d-dep8-tep8-b8-mtp3.yaml @@ -0,0 +1,122 @@ +name: disagg-b200-8k1k-1p5d-dep8-tep8-b8-mtp3 +model: + path: deepseek-v4-pro + container: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23 + precision: fp4 +dynamo: + install: true + wheel: "1.4.0.dev20260730" + request_plane: tcp +resources: + gpu_type: b200 + prefill_nodes: 1 + prefill_workers: 1 + gpus_per_prefill: 8 + decode_nodes: 5 + decode_workers: 5 + gpus_per_decode: 8 + gpus_per_node: 8 +backend: + type: trtllm + prefill_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True + TLLM_PROFILE_LOG_RANKS: all + TLLM_SPEC_DECODE_FORCE_NUM_ACCEPTED_TOKENS: '1.82' + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + decode_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + TLLM_PROFILE_LOG_RANKS: all + TLLM_SPEC_DECODE_FORCE_NUM_ACCEPTED_TOKENS: '1.82' + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + trtllm_config: + prefill: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + disable_overlap_scheduler: true + enable_attention_dp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.5 + tokens_per_block: 128 + max_batch_size: 2 + max_num_tokens: 8192 + max_seq_len: 8232 + moe_config: + backend: TRTLLM + moe_expert_parallel_size: 8 + pipeline_parallel_size: 1 + print_iter_log: true + speculative_config: + decoding_type: MTP + max_draft_len: 3 + tensor_parallel_size: 8 + decode: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + batch_sizes: + - 1 + - 2 + - 4 + - 8 + enable_padding: true + enable_attention_dp: false + enable_lm_head_tp_in_adp: false + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.9 + tokens_per_block: 128 + max_batch_size: 8 + max_num_tokens: 32 + max_seq_len: 9256 + moe_config: + backend: TRTLLM + use_low_precision_moe_combine: true + moe_expert_parallel_size: 8 + num_postprocess_workers: 4 + pipeline_parallel_size: 1 + print_iter_log: true + speculative_config: + decoding_type: MTP + max_draft_len: 3 + stream_interval: 100 + tensor_parallel_size: 8 +benchmark: + type: sa-bench + isl: 8192 + osl: 1024 + concurrencies: "40" + req_rate: inf + random_range_ratio: 0.8 + use_chat_template: true + custom_tokenizer: "sa_bench_tokenizers.sglang_deepseek_v4.SGLangDeepseekV4Tokenizer" +frontend: + type: dynamo + enable_multiple_frontends: false +health_check: + max_attempts: 540 + interval_seconds: 10 +environment: + TRTLLM_SERVER_DISABLE_GC: '1' diff --git a/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-2p1d-dep8-dep8-b32-mtp3.yaml b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-2p1d-dep8-dep8-b32-mtp3.yaml new file mode 100644 index 0000000000..481a73c250 --- /dev/null +++ b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-2p1d-dep8-dep8-b32-mtp3.yaml @@ -0,0 +1,125 @@ +name: disagg-b200-8k1k-2p1d-dep8-dep8-b32-mtp3 +model: + path: deepseek-v4-pro + container: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23 + precision: fp4 +dynamo: + install: true + wheel: "1.4.0.dev20260730" + request_plane: tcp +resources: + gpu_type: b200 + prefill_nodes: 2 + prefill_workers: 2 + gpus_per_prefill: 8 + decode_nodes: 1 + decode_workers: 1 + gpus_per_decode: 8 + gpus_per_node: 8 +backend: + type: trtllm + prefill_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True + TLLM_PROFILE_LOG_RANKS: all + TLLM_SPEC_DECODE_FORCE_NUM_ACCEPTED_TOKENS: '1.82' + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + decode_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + TLLM_PROFILE_LOG_RANKS: all + TLLM_SPEC_DECODE_FORCE_NUM_ACCEPTED_TOKENS: '1.82' + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + trtllm_config: + prefill: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + disable_overlap_scheduler: true + enable_attention_dp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.5 + tokens_per_block: 128 + max_batch_size: 2 + max_num_tokens: 8192 + max_seq_len: 8232 + moe_config: + backend: TRTLLM + moe_expert_parallel_size: 8 + pipeline_parallel_size: 1 + print_iter_log: true + speculative_config: + decoding_type: MTP + max_draft_len: 3 + tensor_parallel_size: 8 + decode: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + batch_sizes: + - 1 + - 2 + - 4 + - 8 + - 16 + - 24 + - 32 + enable_padding: true + enable_attention_dp: true + enable_lm_head_tp_in_adp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.8 + tokens_per_block: 128 + max_batch_size: 32 + max_num_tokens: 128 + max_seq_len: 9256 + moe_config: + backend: TRTLLM + use_low_precision_moe_combine: true + moe_expert_parallel_size: 8 + num_postprocess_workers: 4 + pipeline_parallel_size: 1 + print_iter_log: true + speculative_config: + decoding_type: MTP + max_draft_len: 3 + stream_interval: 100 + tensor_parallel_size: 8 +benchmark: + type: sa-bench + isl: 8192 + osl: 1024 + concurrencies: "256" + req_rate: inf + random_range_ratio: 0.8 + use_chat_template: true + custom_tokenizer: "sa_bench_tokenizers.sglang_deepseek_v4.SGLangDeepseekV4Tokenizer" +frontend: + type: dynamo + enable_multiple_frontends: false +health_check: + max_attempts: 540 + interval_seconds: 10 +environment: + TRTLLM_SERVER_DISABLE_GC: '1' diff --git a/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-2p1d-dep8-dep8-b64-eplb384-mtp0.yaml b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-2p1d-dep8-dep8-b64-eplb384-mtp0.yaml new file mode 100644 index 0000000000..05f706e2ec --- /dev/null +++ b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-2p1d-dep8-dep8-b64-eplb384-mtp0.yaml @@ -0,0 +1,123 @@ +name: disagg-b200-8k1k-2p1d-dep8-dep8-b64-eplb384-mtp0 +model: + path: deepseek-v4-pro + container: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23 + precision: fp4 +dynamo: + install: true + wheel: "1.4.0.dev20260730" + request_plane: tcp +resources: + gpu_type: b200 + prefill_nodes: 2 + prefill_workers: 2 + gpus_per_prefill: 8 + decode_nodes: 1 + decode_workers: 1 + gpus_per_decode: 8 + gpus_per_node: 8 +backend: + type: trtllm + prefill_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True + TLLM_PROFILE_LOG_RANKS: all + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + decode_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + TLLM_PROFILE_LOG_RANKS: all + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + trtllm_config: + prefill: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + disable_overlap_scheduler: true + enable_attention_dp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.5 + tokens_per_block: 128 + max_batch_size: 2 + max_num_tokens: 8192 + max_seq_len: 8232 + moe_config: + backend: TRTLLM + load_balancer: /configs/moe_load_balancer_ctx_ep4_384.yaml + moe_expert_parallel_size: 8 + pipeline_parallel_size: 1 + print_iter_log: true + tensor_parallel_size: 8 + decode: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + batch_sizes: + - 1 + - 2 + - 4 + - 8 + - 16 + - 24 + - 32 + - 40 + - 48 + - 56 + - 64 + enable_padding: true + enable_attention_dp: true + enable_lm_head_tp_in_adp: false + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.8 + tokens_per_block: 128 + max_batch_size: 64 + max_num_tokens: 64 + max_seq_len: 9256 + moe_config: + backend: TRTLLM + load_balancer: /configs/moe_load_balancer_gen_ep8_slots384.yaml + use_low_precision_moe_combine: true + moe_expert_parallel_size: 8 + num_postprocess_workers: 4 + pipeline_parallel_size: 1 + print_iter_log: true + stream_interval: 100 + tensor_parallel_size: 8 +benchmark: + type: sa-bench + isl: 8192 + osl: 1024 + concurrencies: "512" + req_rate: inf + random_range_ratio: 0.8 + use_chat_template: true + custom_tokenizer: "sa_bench_tokenizers.sglang_deepseek_v4.SGLangDeepseekV4Tokenizer" +frontend: + type: dynamo + enable_multiple_frontends: false +health_check: + max_attempts: 540 + interval_seconds: 10 +environment: + TRTLLM_SERVER_DISABLE_GC: '1' diff --git a/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-2p3d-dep8-dep8-b16-mtp0.yaml b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-2p3d-dep8-dep8-b16-mtp0.yaml new file mode 100644 index 0000000000..4cd39526a8 --- /dev/null +++ b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-2p3d-dep8-dep8-b16-mtp0.yaml @@ -0,0 +1,115 @@ +name: disagg-b200-8k1k-2p3d-dep8-dep8-b16-mtp0 +model: + path: deepseek-v4-pro + container: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23 + precision: fp4 +dynamo: + install: true + wheel: "1.4.0.dev20260730" + request_plane: tcp +resources: + gpu_type: b200 + prefill_nodes: 2 + prefill_workers: 2 + gpus_per_prefill: 8 + decode_nodes: 3 + decode_workers: 3 + gpus_per_decode: 8 + gpus_per_node: 8 +backend: + type: trtllm + prefill_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True + TLLM_PROFILE_LOG_RANKS: all + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + decode_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + TLLM_PROFILE_LOG_RANKS: all + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + trtllm_config: + prefill: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + disable_overlap_scheduler: true + enable_attention_dp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.5 + tokens_per_block: 128 + max_batch_size: 2 + max_num_tokens: 8192 + max_seq_len: 8232 + moe_config: + backend: TRTLLM + moe_expert_parallel_size: 8 + pipeline_parallel_size: 1 + print_iter_log: true + tensor_parallel_size: 8 + decode: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + batch_sizes: + - 1 + - 2 + - 4 + - 8 + - 16 + enable_padding: true + enable_attention_dp: true + enable_lm_head_tp_in_adp: false + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.8 + tokens_per_block: 128 + max_batch_size: 16 + max_num_tokens: 16 + max_seq_len: 9256 + moe_config: + backend: TRTLLM + use_low_precision_moe_combine: true + moe_expert_parallel_size: 8 + num_postprocess_workers: 4 + pipeline_parallel_size: 1 + print_iter_log: true + stream_interval: 100 + tensor_parallel_size: 8 +benchmark: + type: sa-bench + isl: 8192 + osl: 1024 + concurrencies: "384" + req_rate: inf + random_range_ratio: 0.8 + use_chat_template: true + custom_tokenizer: "sa_bench_tokenizers.sglang_deepseek_v4.SGLangDeepseekV4Tokenizer" +frontend: + type: dynamo + enable_multiple_frontends: false +health_check: + max_attempts: 540 + interval_seconds: 10 +environment: + TRTLLM_SERVER_DISABLE_GC: '1' diff --git a/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-3p1d-dep8-dep8-b128-eplb384-mtp0.yaml b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-3p1d-dep8-dep8-b128-eplb384-mtp0.yaml new file mode 100644 index 0000000000..4919c39b34 --- /dev/null +++ b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-3p1d-dep8-dep8-b128-eplb384-mtp0.yaml @@ -0,0 +1,131 @@ +name: disagg-b200-8k1k-3p1d-dep8-dep8-b128-eplb384-mtp0 +model: + path: deepseek-v4-pro + container: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23 + precision: fp4 +dynamo: + install: true + wheel: "1.4.0.dev20260730" + request_plane: tcp +resources: + gpu_type: b200 + prefill_nodes: 3 + prefill_workers: 3 + gpus_per_prefill: 8 + decode_nodes: 1 + decode_workers: 1 + gpus_per_decode: 8 + gpus_per_node: 8 +backend: + type: trtllm + prefill_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True + TLLM_PROFILE_LOG_RANKS: all + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + decode_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + TLLM_PROFILE_LOG_RANKS: all + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + trtllm_config: + prefill: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + disable_overlap_scheduler: true + enable_attention_dp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.5 + tokens_per_block: 128 + max_batch_size: 2 + max_num_tokens: 8192 + max_seq_len: 8232 + moe_config: + backend: TRTLLM + load_balancer: /configs/moe_load_balancer_ctx_ep4_384.yaml + moe_expert_parallel_size: 8 + pipeline_parallel_size: 1 + print_iter_log: true + tensor_parallel_size: 8 + decode: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + batch_sizes: + - 1 + - 2 + - 4 + - 8 + - 16 + - 24 + - 32 + - 40 + - 48 + - 56 + - 64 + - 72 + - 80 + - 88 + - 96 + - 104 + - 112 + - 120 + - 128 + enable_padding: true + enable_attention_dp: true + enable_lm_head_tp_in_adp: false + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.8 + tokens_per_block: 128 + max_batch_size: 128 + max_num_tokens: 128 + max_seq_len: 9256 + moe_config: + backend: TRTLLM + load_balancer: /configs/moe_load_balancer_gen_ep8_slots384.yaml + use_low_precision_moe_combine: true + moe_expert_parallel_size: 8 + num_postprocess_workers: 4 + pipeline_parallel_size: 1 + print_iter_log: true + stream_interval: 100 + tensor_parallel_size: 8 +benchmark: + type: sa-bench + isl: 8192 + osl: 1024 + concurrencies: "1024" + req_rate: inf + random_range_ratio: 0.8 + use_chat_template: true + custom_tokenizer: "sa_bench_tokenizers.sglang_deepseek_v4.SGLangDeepseekV4Tokenizer" +frontend: + type: dynamo + enable_multiple_frontends: true +health_check: + max_attempts: 540 + interval_seconds: 10 +environment: + TRTLLM_SERVER_DISABLE_GC: '1' diff --git a/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-3p1d-dep8-dep8-b64-eplb384-mtp3.yaml b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-3p1d-dep8-dep8-b64-eplb384-mtp3.yaml new file mode 100644 index 0000000000..4f1a5128f2 --- /dev/null +++ b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-3p1d-dep8-dep8-b64-eplb384-mtp3.yaml @@ -0,0 +1,131 @@ +name: disagg-b200-8k1k-3p1d-dep8-dep8-b64-eplb384-mtp3 +model: + path: deepseek-v4-pro + container: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23 + precision: fp4 +dynamo: + install: true + wheel: "1.4.0.dev20260730" + request_plane: tcp +resources: + gpu_type: b200 + prefill_nodes: 3 + prefill_workers: 3 + gpus_per_prefill: 8 + decode_nodes: 1 + decode_workers: 1 + gpus_per_decode: 8 + gpus_per_node: 8 +backend: + type: trtllm + prefill_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True + TLLM_PROFILE_LOG_RANKS: all + TLLM_SPEC_DECODE_FORCE_NUM_ACCEPTED_TOKENS: '1.82' + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + decode_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + TLLM_PROFILE_LOG_RANKS: all + TLLM_SPEC_DECODE_FORCE_NUM_ACCEPTED_TOKENS: '1.82' + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + trtllm_config: + prefill: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + disable_overlap_scheduler: true + enable_attention_dp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.5 + tokens_per_block: 128 + max_batch_size: 2 + max_num_tokens: 8192 + max_seq_len: 8232 + moe_config: + backend: TRTLLM + load_balancer: /configs/moe_load_balancer_ctx_ep4_384.yaml + moe_expert_parallel_size: 8 + pipeline_parallel_size: 1 + print_iter_log: true + speculative_config: + decoding_type: MTP + max_draft_len: 3 + tensor_parallel_size: 8 + decode: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + batch_sizes: + - 1 + - 2 + - 4 + - 8 + - 16 + - 24 + - 32 + - 40 + - 48 + - 56 + - 64 + enable_padding: true + enable_attention_dp: true + enable_lm_head_tp_in_adp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.8 + tokens_per_block: 128 + max_batch_size: 64 + max_num_tokens: 256 + max_seq_len: 9256 + moe_config: + backend: MEGAMOE_DEEPGEMM + load_balancer: /configs/moe_load_balancer_gen_ep8_slots384.yaml + use_low_precision_moe_combine: true + moe_expert_parallel_size: 8 + num_postprocess_workers: 4 + pipeline_parallel_size: 1 + print_iter_log: true + speculative_config: + decoding_type: MTP + max_draft_len: 3 + stream_interval: 100 + tensor_parallel_size: 8 +benchmark: + type: sa-bench + isl: 8192 + osl: 1024 + concurrencies: "512" + req_rate: inf + random_range_ratio: 0.8 + use_chat_template: true + custom_tokenizer: "sa_bench_tokenizers.sglang_deepseek_v4.SGLangDeepseekV4Tokenizer" +frontend: + type: dynamo + enable_multiple_frontends: true +health_check: + max_attempts: 540 + interval_seconds: 10 +environment: + TRTLLM_SERVER_DISABLE_GC: '1' diff --git a/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-3p2d-dep8-dep8-b16-mtp3.yaml b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-3p2d-dep8-dep8-b16-mtp3.yaml new file mode 100644 index 0000000000..318e27dde6 --- /dev/null +++ b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-3p2d-dep8-dep8-b16-mtp3.yaml @@ -0,0 +1,123 @@ +name: disagg-b200-8k1k-3p2d-dep8-dep8-b16-mtp3 +model: + path: deepseek-v4-pro + container: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23 + precision: fp4 +dynamo: + install: true + wheel: "1.4.0.dev20260730" + request_plane: tcp +resources: + gpu_type: b200 + prefill_nodes: 3 + prefill_workers: 3 + gpus_per_prefill: 8 + decode_nodes: 2 + decode_workers: 2 + gpus_per_decode: 8 + gpus_per_node: 8 +backend: + type: trtllm + prefill_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True + TLLM_PROFILE_LOG_RANKS: all + TLLM_SPEC_DECODE_FORCE_NUM_ACCEPTED_TOKENS: '1.82' + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + decode_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + TLLM_PROFILE_LOG_RANKS: all + TLLM_SPEC_DECODE_FORCE_NUM_ACCEPTED_TOKENS: '1.82' + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + trtllm_config: + prefill: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + disable_overlap_scheduler: true + enable_attention_dp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.5 + tokens_per_block: 128 + max_batch_size: 2 + max_num_tokens: 8192 + max_seq_len: 8232 + moe_config: + backend: TRTLLM + moe_expert_parallel_size: 8 + pipeline_parallel_size: 1 + print_iter_log: true + speculative_config: + decoding_type: MTP + max_draft_len: 3 + tensor_parallel_size: 8 + decode: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + batch_sizes: + - 1 + - 2 + - 4 + - 8 + - 16 + enable_padding: true + enable_attention_dp: true + enable_lm_head_tp_in_adp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.8 + tokens_per_block: 128 + max_batch_size: 16 + max_num_tokens: 64 + max_seq_len: 9256 + moe_config: + backend: TRTLLM + use_low_precision_moe_combine: true + moe_expert_parallel_size: 8 + num_postprocess_workers: 4 + pipeline_parallel_size: 1 + print_iter_log: true + speculative_config: + decoding_type: MTP + max_draft_len: 3 + stream_interval: 100 + tensor_parallel_size: 8 +benchmark: + type: sa-bench + isl: 8192 + osl: 1024 + concurrencies: "256" + req_rate: inf + random_range_ratio: 0.8 + use_chat_template: true + custom_tokenizer: "sa_bench_tokenizers.sglang_deepseek_v4.SGLangDeepseekV4Tokenizer" +frontend: + type: dynamo + enable_multiple_frontends: true +health_check: + max_attempts: 540 + interval_seconds: 10 +environment: + TRTLLM_SERVER_DISABLE_GC: '1' diff --git a/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-3p2d-dep8-dep8-b32-mtp0.yaml b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-3p2d-dep8-dep8-b32-mtp0.yaml new file mode 100644 index 0000000000..7d01a7f5d8 --- /dev/null +++ b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-3p2d-dep8-dep8-b32-mtp0.yaml @@ -0,0 +1,117 @@ +name: disagg-b200-8k1k-3p2d-dep8-dep8-b32-mtp0 +model: + path: deepseek-v4-pro + container: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23 + precision: fp4 +dynamo: + install: true + wheel: "1.4.0.dev20260730" + request_plane: tcp +resources: + gpu_type: b200 + prefill_nodes: 3 + prefill_workers: 3 + gpus_per_prefill: 8 + decode_nodes: 2 + decode_workers: 2 + gpus_per_decode: 8 + gpus_per_node: 8 +backend: + type: trtllm + prefill_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True + TLLM_PROFILE_LOG_RANKS: all + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + decode_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + TLLM_PROFILE_LOG_RANKS: all + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + trtllm_config: + prefill: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + disable_overlap_scheduler: true + enable_attention_dp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.5 + tokens_per_block: 128 + max_batch_size: 2 + max_num_tokens: 8192 + max_seq_len: 8232 + moe_config: + backend: TRTLLM + moe_expert_parallel_size: 8 + pipeline_parallel_size: 1 + print_iter_log: true + tensor_parallel_size: 8 + decode: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + batch_sizes: + - 1 + - 2 + - 4 + - 8 + - 16 + - 24 + - 32 + enable_padding: true + enable_attention_dp: true + enable_lm_head_tp_in_adp: false + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.8 + tokens_per_block: 128 + max_batch_size: 32 + max_num_tokens: 32 + max_seq_len: 9256 + moe_config: + backend: TRTLLM + use_low_precision_moe_combine: true + moe_expert_parallel_size: 8 + num_postprocess_workers: 4 + pipeline_parallel_size: 1 + print_iter_log: true + stream_interval: 100 + tensor_parallel_size: 8 +benchmark: + type: sa-bench + isl: 8192 + osl: 1024 + concurrencies: "512" + req_rate: inf + random_range_ratio: 0.8 + use_chat_template: true + custom_tokenizer: "sa_bench_tokenizers.sglang_deepseek_v4.SGLangDeepseekV4Tokenizer" +frontend: + type: dynamo + enable_multiple_frontends: true +health_check: + max_attempts: 540 + interval_seconds: 10 +environment: + TRTLLM_SERVER_DISABLE_GC: '1' diff --git a/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-5p1d-dep8-dep8-b128-eplb384-mtp3.yaml b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-5p1d-dep8-dep8-b128-eplb384-mtp3.yaml new file mode 100644 index 0000000000..f5278ea239 --- /dev/null +++ b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-5p1d-dep8-dep8-b128-eplb384-mtp3.yaml @@ -0,0 +1,139 @@ +name: disagg-b200-8k1k-5p1d-dep8-dep8-b128-eplb384-mtp3 +model: + path: deepseek-v4-pro + container: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23 + precision: fp4 +dynamo: + install: true + wheel: "1.4.0.dev20260730" + request_plane: tcp +resources: + gpu_type: b200 + prefill_nodes: 5 + prefill_workers: 5 + gpus_per_prefill: 8 + decode_nodes: 1 + decode_workers: 1 + gpus_per_decode: 8 + gpus_per_node: 8 +backend: + type: trtllm + prefill_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True + TLLM_PROFILE_LOG_RANKS: all + TLLM_SPEC_DECODE_FORCE_NUM_ACCEPTED_TOKENS: '1.82' + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + decode_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + TLLM_PROFILE_LOG_RANKS: all + TLLM_SPEC_DECODE_FORCE_NUM_ACCEPTED_TOKENS: '1.82' + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + trtllm_config: + prefill: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + disable_overlap_scheduler: true + enable_attention_dp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.5 + tokens_per_block: 128 + max_batch_size: 2 + max_num_tokens: 8192 + max_seq_len: 8232 + moe_config: + backend: TRTLLM + load_balancer: /configs/moe_load_balancer_ctx_ep4_384.yaml + moe_expert_parallel_size: 8 + pipeline_parallel_size: 1 + print_iter_log: true + speculative_config: + decoding_type: MTP + max_draft_len: 3 + tensor_parallel_size: 8 + decode: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + batch_sizes: + - 1 + - 2 + - 4 + - 8 + - 16 + - 24 + - 32 + - 40 + - 48 + - 56 + - 64 + - 72 + - 80 + - 88 + - 96 + - 104 + - 112 + - 120 + - 128 + enable_padding: true + enable_attention_dp: true + enable_lm_head_tp_in_adp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.8 + tokens_per_block: 128 + max_batch_size: 128 + max_num_tokens: 512 + max_seq_len: 9256 + moe_config: + backend: MEGAMOE_DEEPGEMM + load_balancer: /configs/moe_load_balancer_gen_ep8_slots384.yaml + use_low_precision_moe_combine: true + moe_expert_parallel_size: 8 + num_postprocess_workers: 4 + pipeline_parallel_size: 1 + print_iter_log: true + speculative_config: + decoding_type: MTP + max_draft_len: 3 + stream_interval: 100 + tensor_parallel_size: 8 +benchmark: + type: sa-bench + isl: 8192 + osl: 1024 + concurrencies: "1126" + req_rate: inf + random_range_ratio: 0.8 + use_chat_template: true + custom_tokenizer: "sa_bench_tokenizers.sglang_deepseek_v4.SGLangDeepseekV4Tokenizer" +frontend: + type: dynamo + enable_multiple_frontends: true +health_check: + max_attempts: 540 + interval_seconds: 10 +environment: + TRTLLM_SERVER_DISABLE_GC: '1' diff --git a/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-5p1d-dep8-dep8-b256-eplb384-mtp0.yaml b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-5p1d-dep8-dep8-b256-eplb384-mtp0.yaml new file mode 100644 index 0000000000..dcdb81c880 --- /dev/null +++ b/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-5p1d-dep8-dep8-b256-eplb384-mtp0.yaml @@ -0,0 +1,147 @@ +name: disagg-b200-8k1k-5p1d-dep8-dep8-b256-eplb384-mtp0 +model: + path: deepseek-v4-pro + container: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23 + precision: fp4 +dynamo: + install: true + wheel: "1.4.0.dev20260730" + request_plane: tcp +resources: + gpu_type: b200 + prefill_nodes: 5 + prefill_workers: 5 + gpus_per_prefill: 8 + decode_nodes: 1 + decode_workers: 1 + gpus_per_decode: 8 + gpus_per_node: 8 +backend: + type: trtllm + prefill_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True + TLLM_PROFILE_LOG_RANKS: all + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + decode_environment: + TLLM_LOG_LEVEL: INFO + TRTLLM_SERVER_DISABLE_GC: '1' + TRTLLM_WORKER_DISABLE_GC: '1' + TRTLLM_ENABLE_PDL: '1' + ENROOT_ALLOW_DEV: 'yes' + NCCL_GRAPH_MIXING_SUPPORT: '0' + MIMALLOC_PURGE_DELAY: '0' + TLLM_PROFILE_LOG_RANKS: all + UCX_TLS: rc,cuda_ipc,cuda_copy,sm,self,tcp + NIXL_PLUGIN_DIR: /opt/nvidia/nvda_nixl/lib/x86_64-linux-gnu/plugins + trtllm_config: + prefill: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + disable_overlap_scheduler: true + enable_attention_dp: true + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.5 + tokens_per_block: 128 + max_batch_size: 2 + max_num_tokens: 8192 + max_seq_len: 8232 + moe_config: + backend: TRTLLM + load_balancer: /configs/moe_load_balancer_ctx_ep4_384.yaml + moe_expert_parallel_size: 8 + pipeline_parallel_size: 1 + print_iter_log: true + tensor_parallel_size: 8 + decode: + cache_transceiver_config: + backend: NIXL + kv_transfer_timeout_ms: 600000 + transceiver_runtime: PYTHON + cuda_graph_config: + batch_sizes: + - 1 + - 2 + - 4 + - 8 + - 16 + - 24 + - 32 + - 40 + - 48 + - 56 + - 64 + - 72 + - 80 + - 88 + - 96 + - 104 + - 112 + - 120 + - 128 + - 136 + - 144 + - 152 + - 160 + - 168 + - 176 + - 184 + - 192 + - 200 + - 208 + - 216 + - 224 + - 232 + - 240 + - 248 + - 256 + enable_padding: true + enable_attention_dp: true + enable_lm_head_tp_in_adp: false + kv_cache_config: + dtype: fp8 + enable_block_reuse: false + free_gpu_memory_fraction: 0.8 + tokens_per_block: 128 + max_batch_size: 256 + max_num_tokens: 256 + max_seq_len: 9256 + moe_config: + backend: MEGAMOE_DEEPGEMM + load_balancer: /configs/moe_load_balancer_gen_ep8_slots384.yaml + use_low_precision_moe_combine: true + moe_expert_parallel_size: 8 + num_postprocess_workers: 4 + pipeline_parallel_size: 1 + print_iter_log: true + stream_interval: 100 + tensor_parallel_size: 8 +benchmark: + type: sa-bench + isl: 8192 + osl: 1024 + concurrencies: "2048" + req_rate: inf + random_range_ratio: 0.8 + use_chat_template: true + custom_tokenizer: "sa_bench_tokenizers.sglang_deepseek_v4.SGLangDeepseekV4Tokenizer" +frontend: + type: dynamo + enable_multiple_frontends: true +health_check: + max_attempts: 540 + interval_seconds: 10 +environment: + TRTLLM_SERVER_DISABLE_GC: '1' diff --git a/configs/nvidia-master.yaml b/configs/nvidia-master.yaml index 15b610cb4a..6f5405e07f 100644 --- a/configs/nvidia-master.yaml +++ b/configs/nvidia-master.yaml @@ -8036,3 +8036,235 @@ glm5.1-fp8-b200-tilert: dp-attn: false additional-settings: - "DECODE_NODES=1" + +dsv4-fp4-b200-dynamo-trt: + image: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23 + model: deepseek-ai/DeepSeek-V4-Pro + model-prefix: dsv4 + runner: b200-new + precision: fp4 + framework: dynamo-trt + multinode: true + disagg: true + kv-p2p-transfer: nixl + scenarios: + fixed-seq-len: + - isl: 8192 + osl: 1024 + search-space: + - conc-list: [64] + spec-decoding: "mtp" + prefill: + num-worker: 1 + tp: 8 + ep: 8 + dp-attn: true + additional-settings: + - "CONFIG_FILE=recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p2d-dep8-dep8-b4-eplb384-mtp3.yaml" + decode: + num-worker: 2 + tp: 8 + ep: 8 + dp-attn: true + - conc-list: [192] + prefill: + num-worker: 1 + tp: 8 + ep: 8 + dp-attn: true + additional-settings: + - "CONFIG_FILE=recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p3d-dep8-dep8-b8-eplb384-mtp0.yaml" + decode: + num-worker: 3 + tp: 8 + ep: 8 + dp-attn: true + - conc-list: [64] + spec-decoding: "mtp" + prefill: + num-worker: 1 + tp: 8 + ep: 8 + dp-attn: true + additional-settings: + - "CONFIG_FILE=recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p4d-dep8-dep8-b2-eplb384-mtp3.yaml" + decode: + num-worker: 4 + tp: 8 + ep: 8 + dp-attn: true + - conc-list: [16] + prefill: + num-worker: 1 + tp: 8 + ep: 8 + dp-attn: true + additional-settings: + - "CONFIG_FILE=recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p4d-dep8-tep8-b4-mtp0.yaml" + decode: + num-worker: 4 + tp: 8 + ep: 8 + dp-attn: false + - conc-list: [16] + spec-decoding: "mtp" + prefill: + num-worker: 1 + tp: 8 + ep: 8 + dp-attn: true + additional-settings: + - "CONFIG_FILE=recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p4d-dep8-tep8-b4-mtp3.yaml" + decode: + num-worker: 4 + tp: 8 + ep: 8 + dp-attn: false + - conc-list: [40] + prefill: + num-worker: 1 + tp: 8 + ep: 8 + dp-attn: true + additional-settings: + - "CONFIG_FILE=recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p5d-dep8-tep8-b32-mtp0.yaml" + decode: + num-worker: 5 + tp: 8 + ep: 8 + dp-attn: false + - conc-list: [40] + spec-decoding: "mtp" + prefill: + num-worker: 1 + tp: 8 + ep: 8 + dp-attn: true + additional-settings: + - "CONFIG_FILE=recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-1p5d-dep8-tep8-b8-mtp3.yaml" + decode: + num-worker: 5 + tp: 8 + ep: 8 + dp-attn: false + - conc-list: [256] + spec-decoding: "mtp" + prefill: + num-worker: 2 + tp: 8 + ep: 8 + dp-attn: true + additional-settings: + - "CONFIG_FILE=recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-2p1d-dep8-dep8-b32-mtp3.yaml" + decode: + num-worker: 1 + tp: 8 + ep: 8 + dp-attn: true + - conc-list: [512] + prefill: + num-worker: 2 + tp: 8 + ep: 8 + dp-attn: true + additional-settings: + - "CONFIG_FILE=recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-2p1d-dep8-dep8-b64-eplb384-mtp0.yaml" + decode: + num-worker: 1 + tp: 8 + ep: 8 + dp-attn: true + - conc-list: [384] + prefill: + num-worker: 2 + tp: 8 + ep: 8 + dp-attn: true + additional-settings: + - "CONFIG_FILE=recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-2p3d-dep8-dep8-b16-mtp0.yaml" + decode: + num-worker: 3 + tp: 8 + ep: 8 + dp-attn: true + - conc-list: [1024] + prefill: + num-worker: 3 + tp: 8 + ep: 8 + dp-attn: true + additional-settings: + - "CONFIG_FILE=recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-3p1d-dep8-dep8-b128-eplb384-mtp0.yaml" + decode: + num-worker: 1 + tp: 8 + ep: 8 + dp-attn: true + - conc-list: [512] + spec-decoding: "mtp" + prefill: + num-worker: 3 + tp: 8 + ep: 8 + dp-attn: true + additional-settings: + - "CONFIG_FILE=recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-3p1d-dep8-dep8-b64-eplb384-mtp3.yaml" + decode: + num-worker: 1 + tp: 8 + ep: 8 + dp-attn: true + - conc-list: [256] + spec-decoding: "mtp" + prefill: + num-worker: 3 + tp: 8 + ep: 8 + dp-attn: true + additional-settings: + - "CONFIG_FILE=recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-3p2d-dep8-dep8-b16-mtp3.yaml" + decode: + num-worker: 2 + tp: 8 + ep: 8 + dp-attn: true + - conc-list: [512] + prefill: + num-worker: 3 + tp: 8 + ep: 8 + dp-attn: true + additional-settings: + - "CONFIG_FILE=recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-3p2d-dep8-dep8-b32-mtp0.yaml" + decode: + num-worker: 2 + tp: 8 + ep: 8 + dp-attn: true + - conc-list: [1126] + spec-decoding: "mtp" + prefill: + num-worker: 5 + tp: 8 + ep: 8 + dp-attn: true + additional-settings: + - "CONFIG_FILE=recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-5p1d-dep8-dep8-b128-eplb384-mtp3.yaml" + decode: + num-worker: 1 + tp: 8 + ep: 8 + dp-attn: true + - conc-list: [2048] + prefill: + num-worker: 5 + tp: 8 + ep: 8 + dp-attn: true + additional-settings: + - "CONFIG_FILE=recipes/trtllm/deepseek-v4/8k1k/b200/disagg-b200-8k1k-5p1d-dep8-dep8-b256-eplb384-mtp0.yaml" + decode: + num-worker: 1 + tp: 8 + ep: 8 + dp-attn: true diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 448540716d..040f26e7fe 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -5736,3 +5736,12 @@ - "Upgrade SGLang from nightly-dev-cu13-20260711-7de33ce8 to nightly-dev-cu13-20260719-99f5a6f4, the latest nightly before the scheduler WAR-barrier regression in SGLang #31687" - "Restore the pre-watchdog AgentX concurrency grid and use AIPerf's default 300-second per-trajectory idle-gap cap" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2319 + +- config-keys: + - dsv4-fp4-b200-dynamo-trt + description: + - "Add the DeepSeek-V4-Pro FP4 B200 Dynamo TensorRT-LLM disaggregated configuration with STP and MTP recipe variants." + - "Run on b200-new with the checkpoint at /scratch/models/DeepSeek-V4-Pro and batch_1/benchmark Slurm settings." + - "Stage the TensorRT-LLM recipes and load-balancer configs through launch_b200-nscale-slurm.sh." + - "Image: nvcr.io#nvidia/tensorrt-llm/release:1.3.0rc23" + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2552 diff --git a/runners/launch_b200-nscale-slurm.sh b/runners/launch_b200-nscale-slurm.sh index b5a448d307..28810096d5 100755 --- a/runners/launch_b200-nscale-slurm.sh +++ b/runners/launch_b200-nscale-slurm.sh @@ -8,8 +8,9 @@ # them would force every dgxc path to become an override hook and would let a # dgxc-only change silently alter nscale runs. # -# Scope: multi-node Dynamo-vLLM DeepSeek-V4-Pro and Kimi K2.6 FP4 runs on -# the b200-nscale/b200-new runner labels. Anything else exits non-zero. +# Scope: multi-node DeepSeek-V4-Pro FP4 runs with Dynamo-vLLM or Dynamo +# TensorRT-LLM, plus Kimi K2.6 FP4 runs with Dynamo-vLLM, on the +# b200-nscale/b200-new runner labels. Anything else exits non-zero. SLURM_PARTITION="batch_1" SLURM_ACCOUNT="benchmark" @@ -49,8 +50,13 @@ else exit 1 fi -if [[ $FRAMEWORK != "dynamo-vllm" ]]; then - echo "Unsupported framework for b200-nscale: $FRAMEWORK (only dynamo-vllm)" >&2 +if [[ $FRAMEWORK != "dynamo-vllm" && $FRAMEWORK != "dynamo-trt" ]]; then + echo "Unsupported framework for b200-nscale: $FRAMEWORK (supported: dynamo-vllm, dynamo-trt)" >&2 + exit 1 +fi + +if [[ $FRAMEWORK == "dynamo-trt" && $MODEL_PREFIX != "dsv4" ]]; then + echo "Unsupported model for b200-nscale Dynamo TensorRT-LLM: $MODEL_PREFIX" >&2 exit 1 fi @@ -59,7 +65,22 @@ export SERVED_MODEL_NAME=$MODEL echo "Cloning srt-slurm repository..." SRT_REPO_DIR="srt-slurm" rm -rf "$SRT_REPO_DIR" -if [[ $MODEL_PREFIX == "dsv4" ]]; then +if [[ $MODEL_PREFIX == "dsv4" && $FRAMEWORK == "dynamo-trt" ]]; then + mkdir -p "$SRT_REPO_DIR" + git -C "$SRT_REPO_DIR" init --quiet || exit 1 + git -C "$SRT_REPO_DIR" fetch --quiet --depth 1 \ + https://github.com/NVIDIA/srt-slurm.git refs/pull/274/head || exit 1 + git -C "$SRT_REPO_DIR" checkout --quiet 22132f7449769315a441b1061dbe1d67435887bb || exit 1 + cd "$SRT_REPO_DIR" || exit 1 + mkdir -p recipes/trtllm/deepseek-v4 + cp -rT "$GITHUB_WORKSPACE/benchmarks/multi_node/srt-slurm-recipes/trtllm/deepseek-v4" \ + recipes/trtllm/deepseek-v4 || exit 1 + cp "$GITHUB_WORKSPACE/benchmarks/multi_node/srt-slurm-recipes/configs/moe_load_balancer_ctx_ep4_384.yaml" \ + "$GITHUB_WORKSPACE/benchmarks/multi_node/srt-slurm-recipes/configs/moe_load_balancer_gen_ep8_slots384.yaml" \ + configs/ || exit 1 + sed -i 's/CONTAINER_REMAP_ROOT_EXPORT = {"ENROOT_REMAP_ROOT": "yes"}/CONTAINER_REMAP_ROOT_EXPORT = {"ENROOT_REMAP_ROOT": "no"}/' \ + src/srtctl/core/slurm.py +elif [[ $MODEL_PREFIX == "dsv4" ]]; then git clone https://github.com/NVIDIA/srt-slurm.git "$SRT_REPO_DIR" || exit 1 cd "$SRT_REPO_DIR" || exit 1 git checkout aflowers/vllm-gb200-v0.20.0 || exit 1 @@ -201,8 +222,8 @@ sed -i 's/^ max_attempts: [0-9]*/ max_attempts: 720/' "$CONFIG_PATH" inject_synthetic_acceptance "$CONFIG_PATH" "$FRAMEWORK" || exit 1 SRTCTL_PREFLIGHT_ARGS=() -# Kimi K2.6 weights are staged on the Slurm compute nodes, not the login node. -if [[ $MODEL_PREFIX == "kimik2.6" ]]; then +# These checkpoints are staged on Slurm compute nodes, not the login node. +if [[ $MODEL_PREFIX == "kimik2.6" || ( $MODEL_PREFIX == "dsv4" && $FRAMEWORK == "dynamo-trt" ) ]]; then SRTCTL_PREFLIGHT_ARGS+=(--no-preflight) fi