1001111011000000010110111000011000111110101100111010101111101100000101111010000010101000111111101010110011001111001111011100001101001011101010001101101111100000110011011110101010010111011011100100110111100001101000100010001100111011111001010000000010011100101011010001111000001100101101011010000100000101001000011101100100011100110010110001000010101111101011110001000110110110110011010100110101010000 0110111011011110110111001011100010010111001100101111001001001000110100011010110011011101110110010100111100111001000111010010010000011011101110000100111100001100101001001010101110101011111110001110011111010001111001011111101001001000110011110111010111011010000100111010001111000111010011111011011001010001100100001110011111101100110001110100110010010101011101001101111000110101011011011110000111010110 1000100111111101101000110011010010101010101001110000000000111010101010010111101010100111010110110110001110010100000010110101111101111110100111111100110010101000100000110111011101100100110111011101100100011011111101101010001111001011101110000101110010011000100010000100101000110000011110011011011000101110010010100010101110111001101001000010111010110010001000011000101011101010100111111000000101100000 0101001000110000101111110110110010001101000110010010011001010010100010010100011001001010001111101100011101110001101100011101001000101100101110010010110011010100010110100110101110000100100001000001100110101111100000101100001100101101100111010101111000100001100111110011010111010010001000011101100011010011101001110000010010110110111111011000011101011001010111111011110110001011100000111101111100101101 1111010101100000110010101000011011000010100001010010100111010000011100111000010001000011000000010101000001001010100000110111010101101011110010100100100011110111000100011000001010001101100001001110011001011110001111110110110000110010101100101111010000000001001001000001111000000000111011101110001010000110011111011010011111111101010011111010011101011110011110100100000001010101100000111101110111111110 0000111010011000000100011111101111110001010011100010000000111101000001111001110101110010000111100010001010011101110101001010010011100101111101011110000100101011010011010000010010101111111010010100111101000001011101101000001111001101010111000101000010000010010110001110101010001011000100101010110110111000010010000110010110100010010110010110101111000101001100001101111111010110101100000100011001110000 0011111100100010011100110001010001101100001111000100000000110000000110010110010010011101111101111100110110100010001000100000010110111001100011110111101100110001000111110100010110001100010101110001100101101010101010110011101000100010000111010101011101111100100000011011011010110000100000010100010111111011001010111001100011110001101001111011111001110000001011000001010001000010111011001100001111100111 0100111000010110011001011100100000110000010110000110101101100001100001111011110100100011010011010000110101100100100011101100001101010101110010101110100000110111101100100111101100010000000010001000101011010000101111010001000100010010101101011111011010111101010011000001001100001111100110111100010001110010011000001010011101101000001111111000101001000100011001010011011000101111101111000011000110001111 0010101101111011000010100001010110111001110100001111111011101100011111010011100111001100101110100100000110111000000111110011011010110001000111001110001101110111101110101001010011110111010100000111101111000111101000000001111111001110011011000101111011101100111100101100100011110110000001110100010000110001001110001011101111010001111011011111010100101001010011001001100111110011101100000100101000110011 1101011101000101000011111010010100110111001110001110011110010110100010010001011101110100000000011110111100110000110111100110111000011110001010000110010001111110000011011000000111000010000111111110100011100111111010101011001010111010110000011010100111100010101011101110100100110110010110010100011000010011101101001011110011110000100000011101111011110101101110110101011001111111011101100111010110101000 0100010111110011001110110001010011011110111011101000110001110111001010110011101000101000010111110011101110000010100011100010011011100010111011101000101100100111100100101100010100000001110010011101010010010001000000110110110001101011100111010001001000001100000000010101110001101100101010110100111111111110110001001111100011001101110111101001001011000011110101010100111001001001110000100100110000111100 1010000000110110001001110010000011010011100110001010101000010001110111111100110001110011000001110100100110100111011011101001010101000100011011110110100110010011111111100000000111011010110110101001000010111101101111001100010001110100000001001001111111100000101011001011001100100101100001001110111100000001000011110111110100001010011001001011001101111110100011111001101000001001010010101001011000000011 1010100101111110010111011111110110110000100011001101000010010100111000101011010111011111000100100000111110111111010011001010101010011001101011110100100111100000000011011111001010101000100110001100100101100000010110000101000111100001000000111011010011000000011111011101011000000000110010010110111100100010110001011011111111010100101011111000100100101000010010011100000100001001000011101011010111010110 1101101011100110010111010101011111100110101100100111101000010110100001001000110111001100111011100011001000111101011101010011100110100110111010000011001010000001001100001001000111110011101110111000101010110011110100000011100101101010110101101000000100100111100110110111101101000101110111100100110011111011001001110011001011010000000000101011001011001111000111011100110100111011111010101110111011100010 0000001010001101001001101110010101011110111001011101110010000000111011000111110011111110100010010111010111001101110101010100011111010011011100100010111111011010011010001010000010010100010100010101000000001011010110011011111101010010000010000111011101001001111011010001011010011011000110000010111010001111000101100010010100111000111111110001010100011011000111011001000101111111111000010001110000000000 0001110100011100111011001000101110100101001100000010011000100101100001000011001011001001111101111100110101110000100010011000000011101000101000000011111110010111000000110001101000001100000011110010010010110011111110011001010001010100100111001100010100000101000001010010001011000101000100101110010000111111010000101001010001111010010111010001000011100010101010110111001000011100001111110101111011110001 1000001011000110100100010011001001000011010010010101001010010111001010101110010001001100101001111000001110100110110100001010100100000001100001011000010001000100101001111010111000010011011011111010011100101100011000101111011100100101100111001010111101010100100011000111011000110010010010000011111101111010101110001010110111101001101101111011101010000001011100100111010100001001010010000111100100011101 1000000100001111101011101001101001110111000010100001111000000001101110101001110001110110000100011001000110000110101001111001110011000100100011111110110010010011010101001000011000101111011100111010111101000110011111000111011010010101100011101000100000001001110000001101011001111111110011111101111111011001101101110110100011101101100010001110011110000101111010010010101001000011001011100100100100010010 1010101000000110110111110111001100001111001100001010011011110001111010111011011111110100011011000110110111101100101000111101101100000111000001100101111100100100110011110110011000101010110111001100111000100001001010010100000110111100100010100100010001110011100111011111000101101011101000000100110100111101000011001011011100000101111110101001000110001011001110010000110000011101110001100101110111010100 0110100001001000101111010101110110111111101000011101101101011001100111110111000100110110010111100000011000110111100010111110010000000110100101011010110100110001101111011001001100000100100011101010000000101000101001010011011001101100111000010111111010100110111010001000101101100001010000010010111000001101001010010011001001100000001000100000110000100111010101011011111110101011101000010010010110100011 0000011110011000100110110111101111101001001100000111000101010001110001001110000000111011110110100100000111100011011010101001011110100000000101100011101111110100100110001101010100001010000111011000001111000101101101011011100011110000101000100000010100001110011001001010100110001111001100011000011101111111111111001101010010110101110111100011101010110010001111110100101110111000011100101111011001110101 0011011010110011100011011000110011110011000100100010000111111100010110111110101001111111010010001100000110010101001100010001011111010001110101010100000000111001001010111000011100001111100111010010101100010010111000110000000111010010100011110111101000001101011010011111111101010011101010101010010110101010000110101110001101110110111100010101010110100100011110001100011011010001000110111100010001101111 0001011010001100111001100011011011000100101011010010001001101010000000101111011101100011110010011010011110010011101100101101011010101110010100010101111101011101111111101000110000111101001010010001001001101010111100110000110000101101111100110000101011001000100111110111011010100011100101100100010000000100100101101010101001000100011010011001111000001000100000000101000000111100100100011110101010001001 1011011110101010100111110101111011000111001010111100100110101010011100000010010001101101111111101100011101011000011111101111001100010000010001010110111011101010001000001001011111001101011111100011010011011110001110000100011111110100000101110111110101001101110011011000000001001101110011011110100010001001101110000001100001100000000101001000010100110010101001000100010010110101001000001101011110010110 0110100111100001010111101011011010011101100000111110101010110001011010011111110010100001100001000001001101011000110110011110011111111001000011001101011110001101000100011100000010000101010011101100001100001001110100111000000000011111110001000010001111110001100110110011111011000111000100101010010011011011011010100101100010001011010001001000001000010001100000100001110100010100011001111111100000100100 1000101010011010010100101010111011100111000010001011101101011001010100000011111100101001110110100010100111110111101110001000110011101001101011010111000000000100111111100111111001000001000001010001101011100100100010001001110001010011101110010110101010010100100010111100101011001110110100111100001100101110111011111111011001011100100000111111000111010000001110111010000110111111001000111111011100011101 0111010001101101110000001101101110001100101001010010000111100010011011101101110101001111001011101101001111010011011000110000111100011001000000111100000110000001101100111010001011111110101001101110001101001000110111110001101011100110101010101010111111111111010011110011111011110111110101011001001010000110001100000110000011000101001010101001011001111100010001111011010000001111111000100111110001000100 1100011110011010101000101011000100110110101010110011111111001011000100011100000010111001101010111111010000111101110111101000001011010000011010100101111000100111111101111000011100010101101100001000101010100001000101101000010111010010010011001100101100110110000101001001101011010110001000101010001110100011010111101100010111110100000000110100000111111000011101110011001011011111010010110001011010110010 1101010101011100011010011111010010101001111101011001101100110000000100011100100010010100110000000100001100101100001011010001010001000111010001100110010010101000010100111000001100000101111100010001111100011110001000110010010110001011100100010110011010011001100100101100111001001101110100000001100101111001000011111100100110010100100100011110101001011000110100000111011001010110010001100110001101110111 1011101100111111001001010000000101000010001000011111010101111100001010010101101100001100111110000011111010111010001110100001110011011111011110110010001000000100100110100001000000111101110110100100011001010101010100110111010111101011011110010001101011001010111110000101101111010100000100110101001000110101101011100010011001010011111101111110001011010001101101100110110100001111101100000000010000010001 1110111101010001100111011011010011100010011110100100100000000001110110110100101000010000111000111100010001000100101001010110110011110100010011001010011011011101011101111000110011011001010110101011000010110010100010001100010010111000000100000101110001001000011001100011110010000011111011000010100110010101011010101101100000110011101100110111110010110011011011001110111101000110010111101111110110110001 0100010111011101100000001111010001001011010111101110011011100101000001111011011000011101010000111000101000111011101000110011100000110000101110000010000101001000100111010011101001010110010101101101000111111001110000011001011110110010110000101101100010111110110011101000110111110101001000001010011100011000010100111111000010110010101101101000110001101011110010100110011100000111101011100001111011101010 0010001111000000111001011011000000001111000101110010011000010000000100111100101010010100000010110110011111100000011100111010010100100001101110001111000011001001011010001101010111101101101101111100001000010001001110100100011001110111011010100100011111101111101110010000000001111101011001100110010111101000001010011000111101100010001010101101001001010010001100101101110110101011110011111110110110100101 0001001101011111110011101011001001011100110111000110101101110101100111001000011111010111110100000001100000110111100110100100101110100101011001110110011001011010100100010000010110110101000110000001100111010101001100100010000110111010011100100101010100101100000110000111100110101101010110100000000000111100101110101101000010011010100001100001010010111000001010010001011001011001101010000010000001100001 0101010011110000110011001110011001011001110100110011101000100101101001010001000100101101000001100000001111111011000001100100011100001100011111010110101110110110101111100011001011011001001011011000000000100100011010111101001110100001001000100001110110101100101001000000100010100101001011010011001011010000111000111011111100100011101011010011101011001010010010010100111101011100100110000110110011100100 0001011011011000011000101010001010010010010010000001010000001001001110100101000100000011100100110110011100000010001011101001111101100100100101110001110000011110110100111111010101000001010101111000110110011100001110101010110010111111000110010111110010100011110001000100000101110000110011011110010100001110101111010000100001001000010001010110011100110101011101000011001001101111110111110111111100100111 0101010101010101010110010001011101110101011110100111101111011110110011011111010100101011011010101001100111110011010001111111011000111001011110000011110111110100100101010001101001111000011011100000010101001001100010101110001011000010001011101001110000101000111111011100001010111100111011011011011001001110010011111101100100001001101100001101010101001000101000000010011011000110011110101010111000111001 1111000111100001010010100001111111010100101011101000011000101111010011010111100110110111001111111101011000110111100001111001010100011111100101010101100001000000110010101011111101100011111101100110000001110101100001100010111011010101011010011011000110100011111010101111101000011001010001011010001010011101111100100110011001001100101101001100000010001100110101111000110101100101101001010000001011001111 1010010000110011100100000011010111011001001110010010010011101101000000000000010011111100001111100000000010001011101000111110111101111010111110100110011010101101110011100011000000111011110011101010000110111001001000011011010110110111010110001111100010010100101001000000010011100101111100110010111010000101101010110100101111111010110111101111101011100001010000111100011001111101000110001011110000000100 1111101110110111101010010111000100000011011111011111101011101100111001100101001100111111110001101000011111111101100000110110010011101100011111011011001111101010111110010010110100111101000101111011111001101101100011010001111100110110101011011100111011111010010001100000111101101010110111011011101101011111011110100010110101010100101111011100001010010000001010001010011001001001001101111111100000000001 0000010111110000011011110010000011011101000101010101111100100011100100101111010011101110101001111110110111111010011100101101011110010101110011001010100010000010000101001011010000111101000101100010110001110010010000110100010110010011010000000001010010000000011011100111000110100010011011110101101001011111100111110100101110100110110010010110001000011011111000011101010001111110101101011011110011010010 0100111111000111001001010001110001110101010110001001001101011011100001100100101111110101110001011011100100111000110110000100111011100000000000010000011000101010111110011001011111101001100010010101000000011011001000111111001101010010111001010011001010100000000100110100001011111110101000110101111010001111100111010000011011001100001010110010100101010101010100000101110011000110101110001011101001001011 0011010011011011001001011011001101000010100110111000010001011100111001100011011010101101101000010011001110101100001100011111000000010110111100010010011011011011111110011001000100001100101011110010100110101011110100111100000111010010011100001101101101001111111101111010011111100010110011101100010110001100111110101100111110010110100100000011001100000101001110010100110111000010111010111011110010111101 1100011100000101010101111110000111111111011100000110111110001111000000111011010010101001010110100000010001100111000001111110110010110010011101100100010010000010100101111110000000011101111010011110000111111000110011001110000011110000101010110110111110100100101010000011011000111000010001010001001010001111010100110111111101011101011001110111000111011001110010101001110101010000101001101110001000011011 0100111011101100011111011101001110010010000111010100011000010110010100110110011010000101101110101101100010000111110010010001001011100010100000110110000010101000001010110110011000001010001111100101110010101111101110110010011100010000111110010010000011001001011100110000111101100110011101010100011101001010110010010010111010001100100001111111011001000101101010101001100000011100000011111101111000101110 1011110010100011100000011010000001010010001111110100100000111111101001100011000111001111010101001101011101110011010110111001101110010111100011101001011110110000001000011010100001001010001000011110010110001001101110101100111011000111110111111100011100011100000110111000000001111111111001100010111100001101010000110010111100000001011000101110011000010000001110100100000000001100011100110100101111100010 0100011111111101110010001011010000100111101111111111111000011010110011001011111100100011111100011011011110011011110010100011000010011001000101010001110101000110001001001010011011001000110111110010101110101111111000100001111101011001010001100101100011100010111100001001011010110000100100111000011111010100001001011011111111100111100000110000001110100100101010011011110100000000101100110111001001000111 1011101101000100011001111000010110110111110011101110110101110011010111010110101101111010000010001110101111111000101011101111000100111001011000001011010110010111001000101011000101110100000110110101001111001001101000011011100110100010101001010100111110001000100010011000011011010101111110110110110101111011000000000111100000000101000010011111011100011101111100000000001101110011110101101000000001111010 1110011000001011110110100100111101010001111100101101011001110010011101110010010100100100110100111111011011001111101100101110100100110101010111000111100111000111010100101100010011000010000100011010010001000010000001100100100101110011110110000100110010000101101111010011100110001100010101010001010000001011101001100101100001001110010001111111100100111001011011100011101101001000100111010101011110100111 1000101000001111101000100001010101001001110101011000011100110100111101001100001000010010001101111101001010000001001011100111000011100000011010110010101001011111100010010000011001100010111101011010010000100011011010000101100100011000111010010110101001000000101000110000011101101001000000101100100010001100111100100100010101010011010101101111101100111111100111111111101101110110110001100100001000101001 0110110011101110110001100011010110110001001000110010011000010100101111010100110011100110110110011101111010010101010110000100011100101000111000000010000110111100010101111000010111111001000101101001010011101110100001001101100001101010010100111101001010000010100111010010000001010001100011101111011011100000000110101001111010101011001100100100100110000101110111100100110101110010011111100110100010101110 0111111100011000001100101110001011011111101010000110000101001001010000010010000100100000000110011011000111110101011110111011000110001001111100110000001110110010101101100000001000011100110100000011111100000000100110011101011101111100100010111000001110001100101111000100111111011011111001000010111110000000001101101000011110010000001111000010000010001001011001101010111111101101000000110101000001001000 0001001110010011111010001000000100011111010100010001000111010000011100011101011000100110011001001101010011000001011101100010010010100011010011010110110000110100111011100010111101111110110010110011101111110001011111101011111001100101010101000100111100101000010110100001010110011100110010100110001001011111001010000111110010011100001110111111000100101111001010110000000110101011110101111000100011010100 0110100100100001100110111001000111111110001000101111100110100001100011111011000100000000000011101000100111100110110100111111100100110010000000111000000111010000011011001011000110101010001110111001001011011111010100011011000110011101001010101111000011011101100011100111110110001101111010011001100111101001111011001000010111100100111100110100010001101100001110101000111010111001010110011011010101111101 0111111011111000100000111101001101111010100100101111110001011001000101110100011000010100111110101110010001010100010001001111000101010000110010000100010011000010101010110000010001000011111011010101010110001101100110011110011100111000010111100111011101010111000001011000100000001011011001000000101000010110101111111011111101011111100010100000001010110100010010101100000100101100001001101010000110000000 0001001001101000100111110110011010111001111000000100001111011001011100001001100101010100010111101011110000101011101111101110101010111111101101011011100001110100111011010000010011000001001110011010100000000001000110000001001100010010110101101100111001110111101111111011011000001011111001110010101101110011101000000110001000011011110011000010100101011101011111001000111110011111001010001111111110101001 1100011110111110011010010100101110010011110100000100011011010010110001011100011001100101010000111000001010001011010001001001010100100110001100101111001100110010111000001010101000111101011000100111110011101111100000111000001010010111101000111001001000111100011001111111011001100011100100011111010110001100100011011000011110001100000100110100011001111000011101011110111111111001010011100100011110011101 0001010001100010011010000110011011010111101000111110110001011110001000010010011111001000101111100001011110011110111011101010101111001001110010000101100000100100100011110001011101011101001000110111101111111011100100110010110000000001011111000001101001100000010110101001000100011101011100000100001110010100000000101001111111011001101101001000000010000001011100011100000100011111101100110011110010110001 1011100100101101101111110001000101000011111010100011100111101000000001101101110101111001111100001110111000000111010101100101011100010100000011100100100101000100000111110101100111110100111110010101111100000110000101001101000001111101011111110010010011011110100110110111010011011101110010000111000101000101101001010100101001011101011111010110010101011010100111110101001101110110010111111011100101100100 1101000001100011011011100011111000101001101011111011101101100001000001011110110100100101010110001000000011011110011111100010111110100111110011101010111111101111101000101111100110100011011001000011111100000100000111010011011101011101100100101110001110100101000010100111111010100000111101110010011110111001001000110100101111010110111011101110101110111111111001110001111100000110001100101111111100011100 0000101000010111000000110011101010111101111101111001110000001010010001101111111001111100010111110010011100000001000000001101110000001000101001001110000000100111101000011100100111011100010010110011001000010001001010110001110000001111111000010011000101010100101111110111110011010110101101000110001001100011100001001011111001101100010000010011011110010100110000101101101000000011110110101111011110100101 0111001111001011100100001100000100000000010001110010101011111101111100000011011011101000001001011001110100110000100101100110000111011011011010101010100110010111001011001010010011010100111110011110001100100011001000001011011110111100110001100001101011110101111010100000110101001011010111101101100010000010110011101011100101011100101110100000100001101111011101101001100001110111101011001100110101011101 0110100111000000111101110001011100000010010000101000011111011101110111011000100010010000010110101000010000110110101101000110111011011001000010000100111010111011011011001101110010111011001000001101001001010111011001010010010100001010011011001000000100001111111100111100100010010111101010101010001100100001010000010001011100110011100010001011001111000111111000011101111100110100001100110100110001001111 1011110101101000010000110110110101111110100001000000100101111100011011001000111101011000110001001011100011011000000111000100111000110011111111101011100110100001010011000101111110010101000000010110000100011011100010100011111011111001111100111010111010000100101010110001010010001010010011011101111100000001111010001001110111011101011110010011010101111010001011110010010101010001101111100101000011111111 0010001101010101111101100110111111110011101100101011010011000101101100100100000010101011001100000101110110100001010110000101011010011000011001001000001011010101010011011101011011010101000000011011011110011010000111111101001100100001101111101100000011101000010100111111101000000010000100010001000000110100101010000110101101111001101000101001000000100101011110100001110010010000100010101011111011101001 0001010011001001011110110000110100000000111110101100101100100111011111011110010111000000101011001100110000101110010001010010001101110100010011110110011101011011001001000000010111101001110100111100101000111111101100011001000001100000000100000000110101000000011011110110010000101101001000111110111100101010110000110100111100101110111111000111000010001101011110100110111110101111100101001110001000001100 1001101100000001001001000001010001101010101001010110111100101000011100001011100101110100011110101100110111100010000100000111111000001011000101111000000000100001101001100010000010011000101100011011000000100001101110001110001100000101010001010011101000111011100110011111000101000010101101000100100001011001111111101101101100111000000001000110101100010001100011110000011111101110110000101001010100110001 0011111000000011010110000100111000101000010001111001001001111101000100100011010101101111101101111100100001100000101000001001101111011000101010010100110011011110111000101010001010010110100011111110011101110111000010010110110110011010110110101111000101001100011100100101000000011101111101010001001100011011101111110001111111100100010100010111111101110010001010001111111001111100100010111100010001110110 1100000010000101100111011011001001010011011100010001111100101010100110110111000000000000110111011111011011011101100111100100011101000000111001100101110100011100010001001001010101010000000111011100000110100011011110111010011100001110010100101001011101100011100001101011010100110101001100110000011110110011001001111101011001001100111001110010011001011001110000110110101100111111011110001011011001011101 1110000100011101001111101010001101101100000010001101001101110011111110010000001110111011010100001000000010011000000011101110111010111101011000011111111001110100110101111111111110101000111010011100010101110000111000010100010101011100110001101110011011001000010111111100011010100100110001111111110110111000001101001011011010010110110000001111101110101110100111100010010000001001010110110000000110011001 1011100001110110001000011101101001111111101101000011111000000100111000010101100000011110000100100011101010010110010110000101010010001110001011000101000111110101101000100110000010010001110000000010100011101000001101110101100110011001110111101110010000001111111111011011010100000010011111010011001010001111011100111010101110101000000000011100011011111011110011010111011111110111010001000100101110100001 1010011000110001100001000101000111101100000001001100111001111101010010000100001100100011011010100000000110110011000101001010101100011101011101000100100000011000001100100001001101010101111110000000010111010110010000010000100110110000001110100110100111000110011001011001010000011001010001100010101111011100110001010011010010011001101010011100111101111010000110001100011100001111101000110110101010100101 1000100100011001000001111011011000100110001101111111001011110111100000011010000110110100000101111011010000010100111110000001101001001110101000001011111111001101100100111100110100010000100110101110110110101101110110010110101101001010110001111110100001101011010111101011010101111010011101110111111011101010011001010100001101111111101101100111000111001001000101101000011010001100000011100000010000011111 0011101101110011100001010110101101011010010110110111001010101111011101001000101011001101001101111110000111111010100000001011001111011000101101101111111010000101110001000000101111010000110011111110111100011111111001010001010100010000100110111100010011110100111001010011100011110000000110011111101111011110101000110001011000100011110110000011111110100110100000001010000101101010111011111101010100100001 1010010110000111001101101110110010000101100100111010100110100110110100001111001101000011101011001011101110101000110111101000010001001000011011111011100011010011001100100110010101010100010110100100001001011110111110100010100000010111001011000110111110001111011111011000010110100001011001000001111111010110100010011001111110110111001101000100001111010001011100010000011010100011010000101001111011100101 1001101111010110010111101101010111111111100000011010000010010110011100001111101100110001010111010010001111011011000110010100110011000011001101011100111101100110011110101100011101001001011011101100000100100101011100011001011000100010111011101110001000101100111110100010100101011000111111001010101111101101010101011000000011011110001110101110111110100011110011101110110100000110111100011010011011000000 1000010001000100001000011100100111010101101111111010001001110011111110110011010001111010100001010010001110111111011000110111011111111100000011111011111110011100001000001111101101101111001010010010000101101110100010011110001000111101011101000011111111101101101101010100101111000100010110111001011000000001110010011111010010000111010101000101001011111001011101000101110001111100011101100100001011000010 0110100101101110001111011100101111111010001110001000010111110101100011001110001110010001011011011111100110111011100110111101110001111001101001010011000111101000111010000100110111100011011101010111110101011110110000011100000011000110011110110000111011110010011101000111110000110101111111000111000010001100111011110011011010000000010110100111000011111011001010111100010010011111111000001100010001110010 0010000010000000000011110101110110111010110011110100110101110011001000110010100111011010111000111001000001100000101001110100011100000110111111010011100100111011111111000010111010111111100000100100100000011011111110001110101111101011110110000011000000001010001110000010111100100111011111000010010101110010110010011000001101110101100111110111110100111101011000100011101110011001100101000000101010111010 1111101100100001110110000100011110110110001100000110100010100111111000111010000111101101001001010011110111110001010011000011010111011010111100101100110110000101111010000100111010111100000000111101000010100001110100110011011110111010011001011011111001000001011100001010000110001001100011000011110100111000000000011110111100101011110010110111010111110111010111100011101110010110001011011011011101110111 1011111001110111000000101100000001011110110010011111110010001110100111101000100000011111100110011011111000101111011011100010100000111000100111101100010111011000110001001100101000011000111001000111011000100000101010000101100010100111111110000111111111011101100100011110111110101100000101001101000111000100111001110100010010011000111100000100110111010010101000011110001000000111001000101000000010111010 1100101101000011110101100000000111111110100000111101000000011011111111000010110011011111001111110110011010100000100101101100010100110101010110101011100101001110111000011110100010010000110100000110011011001001011110010100011101001001101100001100011110111001100101000000101011011101101101000111001100001010011111000011000001110100000001011001110011010110001111000101110000011011001000100001101011110101 1110010101011111110011100101001001101111101101110001100100100011001111101100010101000001100110010100110000000110011010100100000010001101101010001111101111111011000110110000100110000100000110110000111000101011101011101001101100101000011101111010011010010000110100000011010001101011001010100110111000111000001101000110110101010010010010010001000010000111101110000010111101101110011011111101011000010011 1001101000111011110100001001010001000010101100001110111000110001111101101100110110110011000011011100110101100110011010101101001001100010101100110100011111010110101100001001010010010100000111110110010011010100000010011000101001100010010111110000110000101101010100010111001100011001101010101001010001001100111010101010110101001101101100110101110001000011001101000100101010100101000000000110101110000111 1110000011000011110010101111000000101001010111100111010111001001010001000101100001010101111111010101010001001101111101011100000110100001000001001001000010000110101011001110110000111101011110011101001100111100111100100111101000001110101011011001101111100101010110001101101100001000001100011101100001100000011101011000110100101001010001111001110110100101011111111001100000000010100111000111001011110101 0010101001100101100000101000001111101111110101110010111001000000001100010001111000111011000101001001011011000110101000011100100011100111100001011000010100011110111010000110100100001011101001010111011010111100100001111001111101011101111011111010101111110011111011010011000110010010000001101011101011001100011110000001111010101111101011011110000111111001110000001110001011100100011111101000001001110100 1010110011110010101001110000001101000101010010001000000110011110000010100101011010100110101010001011101001101001001000111000100111010001110010001001100010011010110010010101110110111011001010110010010101101001011100100001000011111001110000000010101110001101111111101010010011011110111111001100100111011111011001001011011010001010100010110101100110010111110110110000101111110101100001000111000101101011 1111000111111001001000010110001011000100101100001100101111000001101110101101111100000110011001101101000111110111100110000010001001111101000000001101100110001011100111110101010010110110111001111110011010100000101111000101010101000010000010001001001011110011000111000100010101001000011110011110111000010101001000000110000111101000110000100001101110010101101100100001101011011111000001100111000100001111 1110100111111001010110000010111001010000110100001001111111111101110000011000010000101100001101101100001011110010000111110000010110001101100000010111110000100110010111011011000001110011100101111100111000010001110001110010110110001001101001111110010100011101000101000111001010111000010111000100010001010110101011110111011110000010110100100010110111001011001000111101001101110000100010000000000110111000 0000110011010110110010110111101011111010111101111110101010101110011111010001011110111111101001010010000110100110001110001101000000000111101100111100100010101011101111100001101011101000110000010111110000011011110010110101101111010000111010110011110100100111010111110011111111101000110101101100011101000000001010110101011010010111001001011001100101111011000100101100000010000111101101001001011010110010 1101010000100000110110011101101101101100000000000001110101100000011000100001101000001000001101100001011111011001011000111100001100100100011110100110100010010001100011100110100011110011100111010110001111100010111001100111111000000001101101110110111000010011001011000001011001011100001010101001111010011011111010110011000101110100110100100010001001010110111001111111101111011000101101110111000010010110 0110000110111110110111000111110000011000110011010011101101101010000101111110110000001100111110010011011001011110010010000111000111100001011110111010001111110101101001101100110001111110101110111000000101111000111111110010110111011110001111000110101010001101010001000011001100011110011001010101000100000000010000001000001001101101001001100001100000110011001001010101001111111110111111011001110010001100 1000101111011101110100100100010010011101010111111101011101111100001110111010110110110001110011010001110001010010011001110011001010001101101010001111001000101001110111100001000000000000010010110110100011111110001110101011001010000101111011100010000011111111101110101010001110011010110001011010001100001110111111010111110111110101011010001110111010010110111110101100000011100000101101010111111000111101 1100101001001100001010011110110000011110111101010101011101101000010101011010100101101010010100101111101010111110110110111000111001100001111101001111110100010111110000111011101010000110011101001111011011011010001001010001101001100000110001011110001110000011011000001010000000101110001001101110011010100001010001001011111000100101010001110001101010100100001101111111101010100101001010100101111110000101 1001111011101001101110010111000110011001100110000100001000101101001110111010001111111000001001011101001010011011010011010001000101110101000000000110011101010000010100010001000100111010010111010011111100000100010100011101110111100101000010011110100011000001010001011111001100010000000101010000011010010110010100100110001101010110001000110111001100001011010100000101111011111100001110100001101011111000 1000100000110000100010101011101101010001011110001000110100111100101010100000101111001011010011001010101101101101011000110010010110110110111110010010111111110000011101001111011001001110010100011010110000001011011000001100010111111010011110001010011101110100011001000010101111111011111000000111111011100100010110010101001100110000100001110010110111101110111010111000110101010101100111111010000000010011 1110010110010111000000100111000110011100000011110111100101000000010111111010111011110001011010100010101001101110001000010011011000111100001111000100001111001011100110101100000100111110001001101101001110011101011000001111001001111010101001101110000010110101011000100011011110010010100111011000000111101011010000010110011110011010101110101110101111010111011000100111001010100101011100010111001111101000 1000001010010001001101100101001011001001000010000100100100010101111110010101111011010011000010011001011110100010100011101011000011111010011001011111111011100111110100101110011001111011001001111111111111110011101100101111011111101100100101110001010001011011101111101010010000011000000001010101100001001011011001010000011000101101000010001011100001010011110101010000001101010111101110011011100100100100 1111100101001111001001111110101000000000010011010011111010110101101110110000010011011100000110000011000011100101011110111111110101100000100000000011000100010110101001110100010100101011011001000101011001000001011100011000111100001101010111111001011011001000010110000010101001111000111110101000111010101111001100110000011010011011111010110111100101111111111001010111101101010001110010010101000011100101 0110110000001010010000110001110100010111001010001111111111010000110000001000001110001011110011101101100000111001101001110010010110101010111011100100111110000100110000100011001111000111010001011100000100001000100010111101101111011010111110110000000101000110000010100111101101100101011111010100010111010101010110001111100111110111001010001101011001111011100111001101101101110000010100100010011110000101
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