1101001001100111000010100110110111010110011000001010100100011000101011000100000011110001100111000001111000101011100001110101001011010101010110011111110101101001001001111110011000010000111110011101111001110011001010011110110100100111001010110110000110101001001000101011001110100011011111101110100011000011010101010100000110110110111010100100111111101001011001100010100010110010111101111111100000100100 0011011100101001000010011001010010011011001011000111011011100110100011100111100010000001111010101001001111001101001100001011101111000110000101010111110110000011011000101011011111110101111011110011110101100010010011100001110111111011111001000101100111111011010000100001110001001010101000101100110101001000011111000001101000001010110110011010101000100110011101111000100111110101011011111000111010001001 1101001100100010111111110110101010011100111000100111110001000001000001000001001001001010111000111101001101000110101001001111010101110010010111011011010101001100101101111111100101000110010011000101110110001110111100000101010000101001010110011110001000101101100001100011000011011010011110110100101011010000000100011110001000001110100000010100000011100111101000100101011100010011111111001011111011000111 1110110011110110101000101110110000010111110111000101101010011010110011011001101001101001111011111111011100100000111000111011010101011000110100100000110000111111011011100110110010100000001110011011101010101100011110111111011111010000011010011100110111101100110101000000111100010000011001000001101101010111100011001000101110010001110101010111010100100101100111100110010011110001101100011010111010101011 1011010011110001100010110101101001010010101001100100100011110000101101110100011101010001110010111011110111001100000000011010010011001010110001100111110111110001011101011101100100000111001000000100000010010101110101101110000001011011101101110111110111111101001001010010001000101110111000111111100101101000011111011000000110110001101000110001111101001000001000110100111111011100001101011100100011001011 1110001101011110001100000000101110011001000011000101110111010010010110101110011111100100101110101101111110100000110010111001100111000001101011010110110101011000010110101000011110111110111110000111110101001010101110011110001011110000110111001011000011111011001101100011100010011000100010011100111100000001011000101100111110111000100011011100110110000000011001111010100110101110111010011100101111111010 1100100110011000111101001110011111000010111111011000010101001110010010011010101101111010000100101110010000100110001101100100111011010011001010000101101111111110101110001000011001010100010101100011011001111001100000010101010000011011110000100011110001111001001010110000100101110100011110101010111011101000111111011011000100001000001000011000100011111001111000101000101111110110010111001001010011111101 0110011100100001101111011001111000111001101010101101011001111010110110111101101110110101001001000001010100110010010001111010011111100101010011011000110110010011111111110100001101101001100100001111001110111000000001110001110000100001010000110101111100111101111111010111101111101111100000001010010000001100100010000000110100100100100010111110110010000000000010110111111011010001011000001010000111010011 0110010100001110001100101010000010010011001010111100000010111011011101011110011010010011101011101110101111111100101111100000101001110100011010110011010001000001000100001110010101001011111110001000010010000110010010110011110011110110000011010100101010100010001110100001001100110110000101001001011001010001111000001010000101110011000001110010110010111010111100100001001101111110101011100001001101110000 0000000101111101000101100111010111001101011110011011111000111000101010010110000111101000000000111101000011110101111111001100111000101001011101001000011000111100001010001111111111100011010000001010011010111000101100100001101000010100111011010000010111011111000111100010000000000111011011100000100111101110010101100011111111010111111111101001111101110100001010011111010000100011011000011001011100111010 0101011101000011111010001111010001001011110001001010011110101010011111010011101110111011000110011110111000010111100101000001001101011010111001011110000011100111110000111001000100111001000110000001101101101010111110101111011001110010011010000100111011001110111101110001111011000111111010010000100001100011101111110110011101101100011100010001011111111010000101011010010001000001101001010001001110101110 1101010100010110111011101010111010011111101011101111010000000001010000110110110111100110011110100101001111110000011011100110010111111010111110101111000110001100011100111010100110111101101011010000000100111010111111111000101000001101011010100100111000100110101000101011010011000110110100111010011101101010010101100111111101011100010001110010101100011001001001111100011111111010111101011010011000000101 1011001100110110000101111000111010100101100101000111011010000010010100101110100101001100010101000111100000100010000101011110000010010100000000111100100011011000101100010010100110101111101110010101000111101011110001011001110000011011001110111101011000011011001010110111001100110000001110000010010101001000110101001110100101000110010000010001000010110011010100010111101000001000101001101111001000110001 1000101111111000110100010101101101001100010110110001010011011001000100011101000101111100101011011010101111011110111010000010110110110110111010100000010100101011000001110100100010111111101110100011101110101110000000110100000100001011100010111110011111100011101101110110001010110010111111110110111010001001110100101000110100011100110000001101100111011100100111000101001100111010111100000110000001110011 0110111011100011111101010101000000110000101100010001011011011100111101110110000111110010110010010101110010111001001010001111100010111100100000000110100001001010000101110110101001101101101100111011010011011100000011100000010101111010000011101001001110011101010110011010011000011110011011000000100001011111011101010000110100010010111000101100100001010010100100101001001100010010000100111101101101111111 1001111000000000011101010111010110101111001110111000110110011111111101111101110011111011011001101111011110101111001010011000110000111000101000100111011000100010111000000100011100000100101100111101110110101100101001011110110011110111111011010001011000011101110111110011111001100010110110010010000000010111010100000010000111001000101011001000101011111100101110101111101101011100010110100000101001110110 1100111110000011101011100001010000010100001100101110110001011000001100100000110001100001100001111000110001100000101110111101100100101100100110010110001010011000100101010100111100111101000000111111011000111100001000111100001000011001101111000010110010001001100001001000000111010110010000010001101101110110110100111011101011101110001011101101110001011111100000011010010101111011100111110110011101001111 1010101101110110000111110100001011100111111001001001001010100100101111001100100011011100011010111011010101010001101001011111000010001100001101010101111100010011111101100000000111011000010000001000000000101111110001001100001011100100110111001011101001101101101101010010110011100011010110101010111100100011100000000010001100010100001011010111110110100010010010001111011000101001010000101101110111100100 1111101110111010111100010001000000111000001010111110111011110010000011001010101010110101000101110000000110111011100010101010100100111111011111011110001000011010010110101001011110011100100001101000000100100011000011001001011111111010010011100001110010111010110101011010000011111001110101111010111111000100001001111010101011001101100101101100010001000010110101110011111000101111001010110011101100011010 0011010100100010101110111000100010100010000001111111000011011101100101100110001010010011000101001011001100000100001100001111110011110001111111111111110110110110111000000111101111100000000010001010001000110110001010111101100111010100101010000100110000110111000000110001011011110011101111001001110110101010011001100010001100010111000000010110001001000000000001011000010111101010100010000010101110001101 0001101100101000101111011000000001011001110011111100111100000100001101100110101000110001111100010100100111100111000001101110101010101011000100111011110101000000111110101000010001000101010100010111011101011010101010111001011101110010110001101000111001101101010100110100101011101011001101010101101010101110101101111000100101100111010101001110011001000101000100100101010100101101101001001001010010111100 1100001100100110010111100111100010000101100001010111101110001011000101011010101110010101110101111011010010010101111110101100111001101101001111101101010011010100000100101000011111110111101100111111001011100111010011111101001001000011010011101000111101110001101111001101010001001000000001100011111110110010010011010110001101011110100000001101111110000010101000011001000111100010001111001010100010110111 1010011001110010011001000111000010110010010001000000000110100110001101100011000011011101100010110011110010011110110010011010100111111011111010011001100010011100011101100011011111111011101110010001110110000010011010101011110100011100000000101110111001010101010111101101101101011101010001010110011000100000001011110000011100011000000000110111110110000110000010101110001101110001001000011100100101001110 1001000100011110010100110010011111111111111110000110101011001111001101001011111000001101001001110000010100100100111011111100010000010010001000111000010010111100010100101100001101011001111010100010111111101011111011010011011000000111110001101111001011110011010101010010110100000001100001011010111000010010111011000111010101110001110011100101000110010010101111011000110110011100110111000011100000001000 1010110011000100001111011101000011111011001011111001001011100010100110011001011111110000000101101110000000100101101011010111010100011001100010110110001111000101111011011100110000101111010100100111100101100010111101010101001010111011110111000111111111010111110001101000100100000000111100000011100111000010010100000010100000001011110111011100111011001010100000001001101110000100111001110000111011111111 0100011011100110111001011111101110000111110111011110111101010001010000110000011100100111010100000001010110010010010010101001000001100111011001001010011100000101010011111010001111111010101010000111101000001011110110100010101111101100011101011010111100000001011001000001010110111111100000000101010101010010001011001111001001100011001110010010110101101001101110010101101101101000000011000001110111111110 1010110011101001011100111000010110011100110100001010000111111011011000101001111110010111110110100100010010001011011001001010101001001100110111010010101000110011110001111001010011011010110111011111010110110010111101101100011010001000011100101000000001111001101000110100000101011111101101100110000001110110100001010100101011110001000100011011010010001000000100001001101101000011101010010101001100100111 0101110111011010101111011110001000001111101111010011010010101100000011110111000110011101001111100011001100011110001011110101101001000011001001010111111110110000001000101001110101110010101111011000011101101110000000010101100100101100110111001101010111111011110001001001001001111100000110101000101111001001101111010000001010111001111100110011000111101011111100101011001111101100000010001101100101110101 0000111001111010011110101010110010001011101110011000111100001101111000011101011110101110111000010010001000000010100110110110010101010011110111011100100110100111001100100000000011100000010111010000010001110010100000000001110000111010011110001101011101110000011010100010100011010001110100000010001100110110000111011011100111111000001000111101010011101100001011010100101110100011001100111001001010110100 1010101100011110010011100010110011111101101001010111011011011111100110111111010011100011010011101110111111000010000111010000111001000000001111100101001001000000001101010001000101110000011000001010001100000100111011010100001110110111000011111110010100011000101101100110010111111001110101000000110111101101000000100010111100001111001001001010000010100101111000000111010011111100001110111000011000110100 0100111110101100101111001111100110011110100101100111010000100100111111101000100111100101101101000001110010101100001110111011001011100010011010110111010100100001011111101101010000101100011111011100101000010100111110100101100000011010111101101111101110101100010101011101000100010101001111000111011000111101111101011000110101000100000100001101111100110110011000010011111101000110101000110110011100110101 0000010111000100010101000001010001110110110011000010101111100101100001111010001100001011000100100001110101010101010000001010110111000010111110101001010010100100000100001101000111100011011100111110110010001010110011101010100100110100110001010101101100000010001000100011101101000001011110110000111101010111100110001100001010100100001100011010001010111111001101101111110111001110000110101100110111001001 1001001101110010011100110110101001110001001111111011001011000001101110101001100011000110111010100000010000111011111100110111000010000000011101110110101100011110000011010110100100100010101010101010101000000101000101110101000111001010101010110110000010110101101100110010000001011111101010001010010010000010101100010010101001000000000110110111001011111010110010001011110100101001110011110001110000010110 1000000011000111100010111011011010011110101110111100010100000010001000111100101011110110010010011111110110100001100101001001100011010010001001000011100110001110111101010100010110000100111011010100000000011100111001101010000001011110101000111011011011000010111111100101110101100000011000001110101000000011111011010011000110010011110000011011000100010110000100110111010111011000100110001010001011111110 0110001010010100001010110101001100100000110110011101011110111010001100100111101111110111011011100001101101011000010101100111110100001010110100110111100100111111001101000111001010110101000011001010010111000011110101000100110011000100111111110001001011101001001111000011101010111001111110101010011100011011100000001001000001000000101010100111110111110100111000110011100000000000110001010010000101111110 0111111100000010110111010010100010100010101000110110100011001101101101011111001111111100000101001011001010110111000110010111101001110010010011110001111011111100101110111010000001000111001000110001011110010111111100100111100011100000001000110011010101111111000010010001000010100010001110100101100110000111101010100100000011111000110110100000100011111111110101110110110010010100100101110011001000111000 0110100100100101001010110010001000000000110010111011101000101011001111001110000010001011111100001011100001001101010011101011101001100010110001110110000010001001011011111110010001101111011010001110100010010100101011100100010000100001000100000101110100010001010110011110010010001011100000100000110010011011110000000110010001110101010011010100101111111111001111110111010111000001011000111000101100111010 1110101010100000011100100001000010100000111100110011110101100110001000000110111010100100011110111011001101010111100011101011111101111010000111001110111011100011010000010110001110111011010011100100111100011011110010110111001010101011010100011100110011010101011010100001001011001010100000010001110010111010101011010000010000101100101010010110000001111001011101010111011110101100000100110010000100100010 1011111101010100111001111110111011001111010110001101100100101100011111010101001101001011101100110011001101011101010110010110111000001111111011011110100100110011011100111101111010011011000000000011000100001001111100101100010100001110000010110001111001101010101001101101100111100111101101101010010100000111001001001011001101000001111010101001101011100111111001110000110010010011001100110011001101101000 0010010101101100011000000001011100011001101011111101000000100000001011101100110010111101001000010100110101101110000001000011010100110111110110111111011011110010101010001010001000010011011110110100110000111110100101010100111000001001110011100011101001011111111011011011111110100011101110111010010111010010101100010111100000100100010111000011011001010010011010000111110000001000000011111010001101011111 0101111100110010001111110001001001001111100110101111101100001101100100111100010100111010011011001001110100001011100101010101010001101111111001011110101010010001000111101100111010010111000101001000010110010100000001101001011111010101111011111010100110100111011100010001000110111000110111101101011000100101110100100111000100101110001101111110101111001110010000111001111110011100000010111111011110000001 1011001110011001101011011111011000100011100000110101100010101110000101101100101011010000101010001110010101110101011010111101000010011111010101110100011001001010110011011011001110001011001000100000101000000011110001111011001101010001010001011000010011000110111001101101110000010110110001100011010001000111001100010010011101111101011111111100101000001110001101111000101111111010101101001001100011011110 0110110100101100101000000101011011110110011111101101100010011101011001110111001011000010001010011010100110111100001100100000010001011010110111011011001111000101111001010110001000111101101101101011100110010111101100001000000111001000001010001010011101011101100011101101100100010001010011111111011101110101001010101101011000101011011111011101011110100001010000110100111111101110010000001010111111011110 1000111001101100011001010100110001100000000101000111010010111000101111011010001010101100010000101001110100001011100110010100110110001100111010100100001000001111100100000001111101000010110010010101100101100011011011011001000111001100000110011011011111011001100101110011100111011101011110110100111000101000010110010001110111001010101110000001011001100111110111001101101100101110111011111010011010111100 1010011010100010110011001100111011011001101100010010101010101100001100110111011001100001011110111011101000111100111011110000011001111011011011100000000111110100110000111010011100100100010010000110101111000100100001000010100001010110110110011000100111110011000001100101110011011001111000100101011010101001101111100001000111010001100010110011000000000000010000101101111010110110111010100101001011111110 0011000001011110110000101000111001010011001101001111011011001110000110101001001011111011010100111111100110010111001111011110110111100110010010110001111010011001100100100010101100110000110110110110100110111110100100111111110110100000011010011101000010111010101000010100000111011001101111011110110000101101100100010000001011011010010100001111011000011100110011111111111111000000100111001100101010000001 0110000010110100101100010110011001101110001010011001111111101101100100010010111001111100100101011010010001000000101010010010101101110001100010110101110011100011011001101010111010110110011110110010101101010000111000100000110010110000110100010111110000100011011011010110011111110001001111000110100001001011101011000001110100101101101100000011101010111010111010011011111000000110001111001100000110010011 0110110111101001001000100010101000110011000111011011101111101111000010010101110010001010111011110101110001111001011011000010011101000101001010110001010110001011110100011111100101010011001111111110111101010101111100101000010011101010000110001000011011110100100110010110101110101100100100011011101000101110001100101010010111011000001111001011111111110110010101101010010111110100000010100101001000011000 1011110010111100101101010001110100110001111111111100010101011011101100100011111010000111001110011010101110101110100111111100011001010011010001001100110001100110010001110010010010111111000000101001110001111111010010010010001011100010100111000001001111001100110101010100001000110100110000001101110111110110101000111010110111111011011111111100001110011101100011010010000101001110110101010011101100100011 1110011100001110111110001101100110101001111111001010010010110100011001100011000010000111101011101111001001101100001100100011000110010001011111011111001001100010101111110101000110101110110001010100011110101011100111110010000110010111111111100010110110110011001001011111101011101000110010011100001111101111000100111100101100000101110010011111110100001000001011111111110010011110001000000000001100011100 1110001011111101111011001111110100011101010111111001101010011000000010111010101000101000001000101000100011011011101111000101111010111011001111011001111010111101010101011111111000011000101010011001011100001010111101110001010011101101101010000001101010001011110110011101100110000011111001100010001000100111010011011111111101011010101001100100001101001101111010101010010101001101111110101000010101100101 0110001001010010100010000111101011100010001111010010100101100110100100010011011110111100000111001001100111110010001100111110011011000000011101111110010100110011111001000011100000100011001111001001010000011011001010100010000000101101100011010110000100100111101000001100011001101111000100010010011100110010011011000010001100000000010100111110111010011110100110110111111111010110110011011111010111111010 0011100001001011000110001100000001111111100101011001010000011011010111011001100111110001101101101011100111010111010100011001000010111101111010001010100000011001011100001000100110001100011101110100001101010001110100100000010111111001110001010001100110010101011111110010010110000111001000001010110100011000110000101111110100100101111100101101000001110010100110010011001111101010101001101001011111011100 0011111010101000110101001111110110010011001100011101000001000100110001010101010011110001000111000011000101001110100111011101000011011010111110010011001010001000110110011111010111011001011011111011100110010011100001010000100000101011111000101110010010110010110100110111011001011010111010000101111110001111110011110001000000011111001010001110011100111000110110001010011011010000001011010111111100100000 0011010010100000010010100110111110010011101011000001001100111101100111011100111001000011000000001000101000110100101011011011110010100001110110110101010011101110000111011001101000011111111101100011011010101010110011001000011010000001111110111010001110111111000011001011101100000100101011000110010100011001110100011110000001111000110001010100000011100100100101000001100001010001011000000011100001100011 1100011100111110010011100101100100011000001001011011111010110000100110011110101001011011111111001111001100000101010011100010101000000101100101011110110101101100110110110000001001101111111011010100100010111100100111100000110100110001101011100010001111000111101110100011100011010110010011111010011100111000001100010000110011000001011011001011110111000101110011111101100110011101100110000000110101010001 1111100011010001010111011001100101010000100111000111101010111110101101001111010000001000000001010101101101110111010110001110111010111100010110100111101100111001000000101000111110110000111100011111001111010000100101101101111010010001111010011101110101001000101000011010110101001010111000100100111101011101110000111001101100111101111011011100010110100011111011010010110000010000111011010100000111111100 0011100000001000110101010101110111011111100100111010110101000010101101000011111100100010001001101111110111111001010110101010100011000110000011101111101110100111110010000100111100101110101111000010111001100100101100111111101110011000000101000101101110001111010110011100110110010100111001010000100111100110010101011010101001101011110101110010011101001100100100000001001011101101000010110100111011110001 0111110110110010011011101111100001110100100011111111100101010000010011000110110000011011100000000011110100001110010110010000010011110101010001010111011000000111101111001001011001101001010110000110101101010111011010001000011111001001100110000001001101111010110110001100010000111111000000011110000101100111111001001001000100010110110101011010100101000101001001010100010110001010100010110011001011010101 0000100010100101111000111110010100110000111111111100000111111001011001100001001000111000010100111001011001000110100010111101011011111011001101111001100010000010110011101010000000011001111001110010110001110100000010010001010100011001010111100000110010100010110110010001010111011001110110001000001001101101100001100111011011011001111111110111001011101110100010110100101111000111010000011001101111101111 1101110011010000011110100101100001101000010101010001001000110011100111010011010110000011110001111010100100000001101101011100100011111100000000101010110010000011111111010100000100010101011000011101110001101110110100000101100000000000110110000010011011110011001110100011110010101101000100001101011010101000111110111010110001001100111001000100101010000001000101100000101110010110110001011010100000011011 1000101100011010010110001000110000010111101010110011001110001000001001000011110111101000010110010101101001110001011011011010011010001011000100111011101100011001011101101110101011010111011011000111101110001010000000111000110111101000000100110101111000001110010101101001110000001110101110111000101010000111100000100001101000101110001101010000100101000111001001111111111011011000111111010000010110110001 1010000011001111000011011110000010110000001111011010101000010111001100101011001110010011101101011000011001000101010000111110001101001111110110111111000001110100010100011001011001101011001000010001101110000011110001101011110111110101010010100101110111101100111111100110100011100001101100100110001010001100001101111011111000101100111110101101000000000110100101100001101000011000000101110100101101011100 1010111101100011010010001011110111011000000001110100111011000110001000000010001000110010110101100001100110001110000100001100111111111110110100000101000111001110110101010111101000000010111010100000111001101111101111001110110101000111011000101010110001011111010101011100101011010101100101111110001001001111010111101101110110000100111101111010110100101111111110011110001001111111111111110011100000101100 1000010011101110010100110011101110010110100110100110101110010011001110001001100100011111110011001010010110111111100010000001001011111111010011100111100010011011011101011111000111101010110001101101111101001010010001001111111110100101001101100010001101001110011100010001010010101111010010000011011110010110100101101010010101100000010111011000111100110010011110111001011101100011111011010110100010000001 0000111100010100011010011000110011111000001011100110111100111110011001011101010001111010100110110011010100101111011111110110010100111101010111111010001011001101001011110100110101000110010001110101110000111100000010100011101000000111010001011010100001100110010110010101000000101100010101000111101100111001100111101111110100111011001110100110110101010001101100110000101011010101101001110101110101110100 1010001110011100010110110100011010000101101011111001101011110000100101100111101101111111001101010010010001010111100000011001111100001110010000000111110010001001100111111010101110111100100111010111101000100011000100000100111010010101001000001000000111001001010101010111101001101001111111000000000010001111011000010100010111101001111010110000111001010000011010000011111011000110110111011011110000001011 0100001011000110011110011000100110000100110100110100011110111111001011010000000110100010000100000000110111010101100011111010101001101100111001001110010011010000110100000100100111101001100100000111011110001011000010001010011011001111001101111011110111110011011110110100100001001010100101111011001111110101101011010101100110101011000100011011010100001101001001101011001001000010110110110100001000001000 0001100101001101110110001100110000101011001001110001111101011000100000110000100110110011111000101000101010101100110011101110001010111001101100100000100010011010101011110010101111111101011100000000100100111110000111011011011110110100111010100001011100000001111110010111100010000001111000111011000101011010111000101000000100011111111011011000101001011011000100000001101101010111001000000011100111111001 1001111111100001101001000100101101100010011001111001010010011001011011110000111110010000011010011110011010111110111101100000101101111111101001001010111011111101110011101000000011100010101101101001100100101100110110000100000001110010101111101010010111001100100011101101110000101111001011100000100100100001000110001101110011001101111110011101100001111110110011101001110011101101011001001011101100001110 0110111010000111011010000000001101011011001100000011000110101010110101001000110011011000100110010110011001001010010101111011010000010001111110001110011100110101011111110000110010011100100011111110100110011000101011011011111101010111000011101110100111101101000011011001101100001011000001011010011111111100000011011111101101001010000110110110110001000100111011001111010110010000000100000101000101010111 1000110101101010001110010111000110000011101100110111100111011110001110001101110000101011100001100110110101110010000100010011001100000100110101010101000100111111001000010100001111100001010011110111101011011111111000101001100111001011111110000100010100110011111100100100111001100010000000011101100111000011010000110101001000101111110101011001111101100011100100110101101110111101110000110110110001001000 0111000001101000100000000010011110011010110101011000001111000110000001010010111011010111100001100110101011010001011101011111101101000111100101010000110011010011010000011001100011100010011110001110100000001011011100001101111011010101001010101000000011111101010101110100011000100101000101010110111101101010100100011111000001110110111111001001001111011001110010001000001011101100111111101010101001000000 0111100110010000001110000111001110100101000010100000011101001110101000001000110101000001011101110111101011100000100011010001010001101110101101110110100111110110101000111010000011010100011010010100000111100110110001110000011011111110000001110000000011100000001101000110110001000011111110000110101000111101111010110011100111000011100011010001110000011110011100101001000111101101101001101000000000111111 0110000001100110110000011000100101001011110111100011111111101101111100001000101110101111100001111010111111101101001000101000010111000101011101101011101101100101101010001011000101010001001011011000011101100111101001100100101010100111100111000001001011000001001101001011110111001100101000001001100101111010111110100010110100000000001111101100110000000010011000010000001001101011100101100110000100000101 0000000000000011011111100111000101011001111101000110101010010001010000000001111011000001101010000100111111001100011101100000111111011000100100000011011110100100100001110100110110001100111010010000000100010100010001101000010101000101110000000110001110001101001010100010101110110011101011010001010100110010000011011100100011010000011111011111110000010011010000001101100000010010111101111101011001000100 1011011010110101100111000001011000010000100110100110101101001010011001100111001110001110111011011001111010100111100001110101001100010001010010011010011000111101100110110101110110000110111110011110011001011010100011000001011101000001010001010001101100101011100000110101010011011101111111100010010111110110010111010000101000101101011011101011010001000000110000101111001010100100110110111100000001101101 1100101101010111100100110010111110101101111011101100100010100000110110111100000010001100011110101101011000001011110000110110111011101011011100001011111010000101101001100101010111001100011010011101100010101101011001000100011010100110101101011110011111111111100011001100010010100011011001010111110110010101011101010101001100111111010111100101111010011010100011011111000101100100101010100111100101000010 1001001011000011101001000100010011011011000010001000110110010001001101001100111100110000111111010111010000001100000110111100001101100000011100110001101001111001010011100111001000100000101101110110000111010100100111100100001101110011100001010111100111101000010000101001110110001110110001001011111011000100010000101011101111101100110110011010100111010001100110010001111111011100010011001111100110010101 0011110111010110110000110000101110111101000101000001000010010110011001111100100111001001110011110010010000111111100010100010100101001101111011110001111110001000001011010100011011000100010101100001100111010100011001110100010110001111101011011101100010110111111101001110100110010110110010010010100111111010100111101100101000100110100011111010110000111110100011100100110110111111010011111000010001001000 1110100110101011010001011100101011100111100011001110110011011010111111001111011010001111000100111000001011110100111001100110110001101110001101010111111011011010111100011001111001111110010011001000100110111111011000010110010001100100110010111011000001101101001011110111111010001110101001110101100001100111001100100000011101101110001111111100010000011001111011101001001010010100101000111000011101110100 0110001110000011100101110110111110100000011011000000101110111101011110011001001100011101001101011100100000000001001111111010010100010111000001100110010010010101001111011000110010100000101101011000100101010101000101000110110011100010001110110101000011001101001110111011110000010000100001000101010001000000100111100111100110000000000111111111001110010011011000101010101001110101010100101011111011111000 0100110010011011111100000101110110010000001000101001101101100111000010000111110111101100101010101100010111000101100000110111110101000011110011010111001000111010010101111000000111000000010110111011000111010101011001110000010001111110100001110111110000101011000101111110000001101001001011011001010001100111001010010011100011111101010001010110001111010001101111011101010111101000001100000010001100000111 0010110001100111100111000011001100001110100110101000001100100000010011001000001001111111110000101111110111101000000000111000000010011111111010000111011011011100100011000100111011010001110101000110010110000101110010111001100010010001101101000010110011011011110101101010101101100001000101100010000010000111000010001000101010000110010011011100010011111000001011101101011111101011101100100110000000001000 0000000010111111001010100111011111101100100101110000101110100001110100011110000000100001111011000011010100000011100001010100111010011011011111011000110011000010011111111001100011111011000000011111111010000010011100101101000000010011001100011010111000110001000100100101010011110000010001000110101000100101010011110100001001010101001100101101111110001010001011101110111101101101111111000000101000010000 0100100011010010110001010100111000110111111010110111101000010110011010110010000100011101001100001111100101100110011010100011000100110010010101111111010100000110110000010101111010010000000011011000111010000011101100001001110000111101000010101101100011100110111100110101100100111010010001011101011101000100110000011000100110111101110100011100000100000111001010110100010000110100010101011000001101100011 1111011110011000001110010011011101011111011010111010011101110011000010001010001011010111111100100010111001110011111000110110100110001101111100111001110101001100000100111100000111010010101000000110000101100111000111110001110100100011110011000011111001101110010001100110100100000011010000100010100010110110011001001110000100011011010111011011010011100000100000101000101100000111010110100000110010100011 0010100111110111011001011110011101111001111011010101110101010101000101001001101111101011001001000110010000110000010000010011100111110111100110000101010010011111101110111110000110000001010011000000100011001000111010111100100101100101000000010011001001111000111110100101011000111011100101001000001010001101001000101110000000111110110110101000110111011101000110110010100010111000010110100001110111100000 1111100001100000011000001111010101000111110010111110001001110101000011101101001001010110011001000101101101110110010110011110010011001001100100110000000110010101010000110010001101100111010110100011110111101010100110111110000101100101001001000101000001101100000000000101001000100001110001110100100000111100010100001111001111011111110010011100111101011101011000110111011010011001010000010110101100010010 0001011110000111001010101111000101010110011001110011100100011001001101001010111110010101001011100101001010111001001001110100111010111011010100010101011011110000010000100001011001011101100001110111111100111110111011000010101100011001000111101000000100001110001010100101000110001110001000101101111001011011001101110001011100101101010010101101101001010101110001011000010000000111101011110101010110110101 0100100011111000101010000011001110111110111010100010110111100100000100001001000011110101010001110100011010000010101110011010000111001100011111010111100011001011101000111100101100010111011111011011000111010101100001100100011011001001000001010000110011111110111100001110111101001100001110001100111011010111111001010100001101111111010000110101111110110101111100000000101000010110111111101000111111101011 1001100101101000101011101001101010010000010000001000001111011001111111010011101111011101010000010111111100010001010000110010011010010111110100010010110111100111111011001100000110001000011000100110011111111101111011100001110101010001011000011000100010001101000001000000111000001010101111010010011111110000111100100111001100000000010110011110111000001001111100110100001101111000011001111100000011011111 0011000001011100000001011010100001110010100000011001111101011001010001110000111010011001010001100010111001100110011110100000101001101010000010011111101010010110110101011000101100101011011011000011100111011110000010000110100110011100001000001010010001011110100000100111000001011010011101101001011001111101011110011100011000110010010110000010010011111101000001001110111110011100110110010101011011011001 0010001011001010001001110111011001011100100011011011000110110011011011000111011011011001011100000011110100001101111001111000110010110000111001011110010001110010110010111101011100011110000100110001101000110001001011111001100011100101110101001111111010001010011010110110011010010001110100100110000001010100010101001101110101000100100110011000110000110001011100000010010110101010010001010010011101101111 0010010010010111111111101100010000101111111111100101111000100110011010011010001001001010001011110000001111101100011011010100010011111011011010100010010101001110100001001111101000010110010001001110000011101110101011011100111111100000100111100101100111010101010010101101010110000000010110011001000010011101011011011110001011010010011101101011100100010101111100001100011111011111011000111000011101111001 0010001111011000111100111110011100110100001000001000100001011100010010110010101111000111100100111100101100011111010101100011100011001000011001101000010001011000111100000010110110010000000011011100000101010011000101111100001110101111010101101000010010000011111011101011000000110011001101100100000101011011100011011101011011100101110101101100110001010101001100011000111111100001101111001110000110110001 0000101011101000000100011010001101110000001100110101101010001000001000000110101010101001100110110111111000100101101111010100101110000110001001010100000010100001100011100000100000011100011001001010101110001001110010000111111101010110010100010011010011000100101100011101010111011010000110100001010100101101111010101010010000001110011101001011100100010110100000110000010010111001001011111011100101110111 0111110000100100010011100111100001111011000001111101111101000010010000100111111110010100111000001000010000110001011011011010111010100010001100011110011110110010101010010100010011101010011101011010110011011000110111000010011011100011001101011101000111011101001100000100110001011000101000010101000100110111010001111101010001101010101110001101101010011100100001001011101110000111110111010001001011111110 0110011111101000110010101111100011110101101001000101011101011101111101101011111111111110111111101111101110001000010101000011101100011011011011110001011010011111100101010010100001100111010111001110100001011010011101111000010100110010111010011001011000111000101101010101000000101101010010010000000111111111011100110011000110001011110011000110111100100000000101011111101100011001000100001111110110010011 0101011011110000111101011101000000100101000100110111100001011101110010111000111111111110110000010011010110010101110110011000001001100111011000001010010011010110000001110001000000111111000110111001011100111111101110010110000000110110001000001000010100000111010111000111101101101111111101010110000110111101101010011001001011001110111011100111000011110101001011111001011100110110011101100101000100111011
cTrader Algoシステムトレード

【cAlgo】ナンピンマーチンcBot【Sample】

4/10/2021 12/18/2023

4年以上前の記事です。内容が古くなっている可能性があります。

悪名高いナンピンマーチン

世の中にはいろいろなロジックのEAやcBotがありますが、ナンピンマーチンほどシステムトレード初心者を魅了し、そして地獄の底に蹴落としてきたロジックはないのではないでしょうか。

(EAやcBot・・・cTrader信者のajinoriとしては全部cBotと呼びたいところですが、一般的な呼び名で総称してEAと呼んでおきます。)

 

ナンピンマーチンとは

説明は不要でしょうが一応簡単に。

ポジションが損失を抱えたら、同じ方向で追加エントリーすることで、平均エントリー価格を下げる「ナンピン」と、負けたら倍掛けして負けを取り返すギャンブル手法「マーチンゲール法」を組み合わせたロジックです。

一般的にはポジションに一定以上の損失が出たらより大きなロットでナンピンして損失の相殺を図るロジック全般を総じてナンピンマーチンと呼ぶことが多いでしょう。

 

なんでダメなのか

一番大きな理由は破産リスクの大きさです。「マーチンゲール法」自体、無限に倍掛けできることを前提とした必勝法のため、ロットが資金的ににエントリーできないくらい膨れ上がった時点で口座破綻を起こします。

破産リスクを小さくするためには最初のエントリーをできるだけ小さくする必要がありますが、その結果リターンが少なくなり、その割にはそこそこの口座破綻可能性を秘めるという、どう頑張ってもハイリスクローリターンの設計になってしまうのです。

 

本当の問題

ハイリスクローリターンであると最初からわかっていれば誰も使うことはなく、ただすたれていくだけの手法のはずです。しかしナンピンマーチンロジックはいまだに人気・・・かどうかはわかりませんが、少なくとも有名です。

ナンピンマーチンの怖さは口座破綻のリスクが感覚的にはわかりにくい、という部分にあるのでしょう。人は小さすぎる確率を0として扱ってしまうんですよね。特にマイナスの事象に関しては。

「さすがに〇回も連続で負けるわけないっしょ!」って。この思考が破滅への道を着々と進んでいくのです。

また、EA開発の視点から言うなら、このロジックを使えば比較的簡単にきれいな右肩上がりのバックテスト結果が出せてしまうんで、EA販売をする人からしたら都合がよかったというのもあるかもしれません。

 

作ってみた

どうしてもナンピンマーチン=ヤベーやつというイメージが強かったため、手を出したことがなかったのですが、今回ブログのネタとして、至極単純なナンピンマーチンcBotを作ってみました。

ソースコードも公開してますので、よかったらなんかの参考にしてください。なるかわからないですけど。

 

何も考えないナンピンマーチンcBot

ロジック

最初に適当にエントリーします。プログラムに「適当に」とか言えないので、とりあえず起動時の最後のローソク足が陽線なら買い、陰線なら売りにしておきます。特に意味はないので別に逆でもいいです。以降、ずっと同じ方向でエントリーを繰り返します。

あとは設定値(Pipsパラメータ)以上損失が出たら倍掛けエントリーします。損失が相殺された時点でナンピンポジションは全決済します。

利確も同じ幅にして利確したら再エントリー、にしようかと思ったのですが、決済直後に再エントリーはさすがにあり得ないので、「最初のポジションは一番いいところで決済して再エントリーした」と仮定して、最初のポジションが一番いいところから設定Pips以上落ちたらナンピンさせるという設定にしました。

・・・説明がわかりにくくてすみません。ロジック気になる方はソースコード読み解いてください。

 

ソースコード

using System.Linq;
using cAlgo.API;
using cAlgo.API.Internals;

namespace cAlgo.Robots {
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class NanMar : Robot {
        [Parameter(DefaultValue = 100.0)]
        public double Pips { get; set; }

        const string LABEL = "NanMar";
        const string COMMENT = "namping";
        TradeType _tradeType;
        Position _basePosition;
        Position _lastPosition = null;
        double _maxPips = 0;

        protected override void OnStart() {
            if (Account.IsLive && RunningMode == RunningMode.RealTime) {
                /* 当cBotはブログ記事用に作成されたサンプルcBotです。
                 * 何の工夫もないナンピンマーチンロジックにより売買を繰り返すため、高確率で口座破綻を引き起こします。
                 * 間違い防止のため、初期状態ではリアル口座で稼働ができないようになっています。
                 * リスクを承知の上、動かしたい場合はこのifブロックを削除の上ビルドしてください。 */
                Print("初期状態ではリアル運用できません。ソースコードを確認してください。");
                Stop();
            }
            // --- 適当に売買方向を決めて発注
            _tradeType = (Bars.LastBar.Close > Bars.LastBar.Open ? TradeType.Buy : TradeType.Sell);
            var res = ExecuteMarketOrder(_tradeType, SymbolName, Symbol.VolumeInUnitsMin, LABEL);
            if (res.IsSuccessful) {
                _basePosition = res.Position;
            } else {
                // --- 発注失敗したら一度止める
                Print(res.Error);
                Stop();
            }
        }

        protected override void OnTick() {
            // --- 初期ポジションの最大獲得Pipsを覚えておく。
            if (_basePosition.Pips > _maxPips) {
                _maxPips = _basePosition.Pips;
            }

            // --- ナンピンしてなくて、初期ポジションが最大Pipsより設定値以上落ちてるか、ナンピンポジションの損失が設定値を超えてたとき
            if ((_lastPosition == null && _maxPips - _basePosition.Pips > Pips) || (_lastPosition != null && _lastPosition.Pips < -1 * Pips)) {
                // --- 前のポジションの2倍ロットでナンピン
                var volume = (_lastPosition != null ? _lastPosition.VolumeInUnits : Symbol.VolumeInUnitsMin) * 2;
                var res = ExecuteMarketOrder(_tradeType, SymbolName, volume, LABEL, null, null, COMMENT);
                if (res.IsSuccessful) {
                    _lastPosition = res.Position;
                } else {
                    Print(res.Error);
                }
            }

            // --- ナンピンポジションが前の損失を相殺できてれば初期ポジションだけ残して全決済
            if (_lastPosition != null && _lastPosition.Pips > Pips) {
                var myPositions = Positions.Where(pos => pos.Label == LABEL && pos.SymbolName == SymbolName && pos.Comment == COMMENT);
                foreach (var pos in myPositions) ClosePositionAsync(pos);//本当はクローズされたか成否確認しないと危険。今回は面倒なので省略。
                _lastPosition = null;
                _maxPips = 0;
            }
        }
    }
}

たったこれだけのコードです。ろくに確認してないので説明と違う動きになってたらごめんなさい(笑)

あ、少しくらいはcBot開発の参考になりそうなこと書いておきます。

ポジションのラベルとコメント

cBotからの注文ではポジションにラベルとコメントがつけられます

あくまで私の使い方ですが、基本的にラベルはMT4のマジックナンバーと同じ感覚で使います。どのcBotから注文されたかわかるようにするため、基本的に一つのcBot内では同じものを使います。

コメントは注文に追加情報をつけておきたいときに使います。cAlgoのメソッドPositions.Findではコメントを指定しての検索はできないのですが、LINQを使えば特定のコメントのポジションだけ抜き出すことは可能です。

このサンプルではナンピンポジションであることをコメントに残し、一括決済時にコメントがついたものだけを取り出してすべて決済しています。

 

ダウンロード

いろいろ改造して試してみたいという方はこちらからどうぞ。

(2023/12/18 更新 古いものはバックテストレポートが出ないようなので、.NET6.0版に差し替えました)

 

バックテスト結果

10年バックテストの結果がこんな感じ。さすがにいい結果とは言えませんが、一応右肩上がりです。

ちなみに最適化一切なしの一発バックテストです。これはEURUSDの結果ですが、どの通貨でやってもだいたい同じような結果が出ます。

よく見ると資金が極大なのがわかるとは思いますが、つまりはそういうことです。100万円程度だとたとえ1000通貨から始めても破綻します。

こんな簡単なコードで、価格も一切見ないでトレードさせるだけなのに、資金さえあれば最適化もなしで右肩上がりのグラフが出るわけです。よく見ればおかしいのはわかるんですけどね。このリターンの少なさとか。

 

最適化してみた

最適化というかPips設定一つ変えただけなんですが、こんな荒いカーブフィッティングでもよさげなグラフができるから面白いですね。

トレード回数も増えて、目立ったドローダウンもうまい具合に隠れて、あとは縦軸の金額さえ目に入らなきゃいい感じです。(笑)

 

ちなみにこんな感じの時々下にスパイクが出てる直線右肩上がりグラフこそ、まさに典型的な損切りなしナンピンマーチンEAの特徴ですので見れば一目でわかります。

(確かMT4だと決済順序に気をつければ下方向スパイクは見えなくできた気がします。見えないとナンピンマーチンか損切りなしグリッド系EAか見分けつかないですが、cTraderなら見えてしまうため明白にわかります。)

間違ってもこんなグラフのEAにひっかからないようにお気を付けください。最近はまともな販売サイトであればナンピンマーチン使ってるかくらいは書いてあるので大丈夫だとは思いますが。

 

まとめ

実際に簡単なナンピンマーチンEA(cBot)を試してみることでその破産リスクの大きさとリターンの少なさを実感することができました。

皆さんもぜひ上記のコードをいじったり、プログラムがわからなければバックテストだけでもいろいろやってみてください。

もちろんこのロジック自体がナンピンマーチンの中でも特に酷いせいはあるのですが、こんなものですらなんとなくよさげなグラフに見えてしまうことを忘れてはなりません。

ロジックを改良して、ちょっとよさげなモノが出来上がったときに、正しくリスクとリターンを評価できるのでしょうか。ナンピンマーチンで一番怖いのはここだと思います。

もちろんナンピンマーチンのすべてを否定するつもりはありません。1回1回の勝率が独立事象のギャンブルでマーチンゲール法使うのに比べたら、FXでナンピンマーチン使う方がよっぽど理にかなっているのも確かです。

人によってはこれに、まともなエントリーロジック、ナンピンの仕掛け方、損切りの仕方など工夫に工夫を重ねて実用的なEAを作ることも可能なのだと思います。

でもそれって、第三者から見た時に中身もわからない状態でまともかどうか判断できるんですかね。少なくともグラフだけでは難しそうですよね。

基本的には「危うきには近寄らず」で敬遠しておく方が無難な気がします。


まだコメントはありません

新しいコメント

コメントは承認後に公開されます。承認まで次のコメントは投稿できません。

cTrader's Life

© 2025 ajinori