1010011100000000101111010100001100110000110001100010111001010011100111000101110111111111101110101100000111101100000000101111111100111010001011001101110001111000110101011100101110011100010101110111100100011111100000101000011110001010011010100000011001101100010001010000010001010010000100110100110001110111110110110000111010011010101111010011110111110100010101010100011111001111110101000111101000110100 1100100010000101110110100101010101001010000000110100100101111011011100100111101011010000010011010100001100001001111011101101001010101000000111001011010000110001110000011110001000011000110100010000011001000111010110001101100001110001001001000100000111000101100001011011101001111010110101111110111100101100100100000100000110110011010000100000001010000001001010011111010111011110100011000011111000000010 0100000100001101011010001101001000000010010001000110111011010110110010000100101111110111010000101011101111011110000110011100010000101101101011101111010110010011100111111101010010000000001111000000100110101100110000000011101100001101110110010011001000111101101101011010000110100001010011100110100010001011110101000110110110000010010101101111010110110000111110010010111110101001001001111000110111110000 1000100000111010000010000010010000010001001011111100101100101110101100011101101001100111111000111011100100110101011111001001010110110000000010101110001001001001111110111101010010101100000000101011001010100111111000111011111010111101100100111101101010010101001100001111000000101101011000101100001010110111101100101101011011100010001001011001100010010001000001001010111101101011110111001110001110011111 0001000000111010011111000110000000001111011000110011010011000100010111111000101110101100101100011100000111001110110000111010101110010011101011001010101000111100000010101001101001101100101101001100000000111110000011111111101101011111001101111110100100000110011010111100000111101000000001010111000101010100000110011000111011011101010011011111100101101011000011111101011001111001000000001111011100101111 1101010110010101011001000010111000111001001101111101110100001110101000000011110101101110101111110101001110111001000101110101100111011111111100111111000101101110111010101110001011101101111000011000101111100011000000010111110010011100011010001111010101111100111000011000000011101111000101101011101010000010010011111000111001111111011001101001110110000001110011110101001100111101001100100011110000000001 0100100111000000101101000100000001011001010110110000110010100100101101011100111110011000101110010000011010010110100011001011111110111101001000110110001010011100100101010100010001111110011101100011100011001110100001101010001101011111100001111010001101010101110111111010001001111000010010100010001010101110100010000011101011100111011011001100101001000010001100001010100000001101111110100011011101110111 1110001100011001010010111000010110101001000000101001010111001001011100101000101111010100100101110000111001001101000010110100010100101101110010000011110011001010001101101001101001101010000000000001111101001100011000001010101100101110100011111110111011010100100011101100001000100100101110011110101010001111011111111110111000110000010110101000010101111010100100011011010101111101000001000001111101111101 0001001000101000001001111010000011000000100011010101001111011101000001110000110111001101101111101010010110101101010111110111000110000111110110010001110001111110100100011110111011010101001010000010010000111111000111101000111011001111000101100100110011100010000010010010100000001011101100100001010000000110010101011000110100111000110101000011110110101010111101110101010001110101101001000101101100010011 0001000110011110000100101111001101000011000001100110001100011010001010001011000000110100101011001001101100111000001001110010110001111001101101001111011110011100011110100111001111001000101100111010010010000111110001011011111110010111000001010011000100110100001101100000110101000101111001110010111000000000010100111110101010001101101101010110101111100111111110000010011010001010100001010101101011010001 0001010011011110010111100000100010111011101010000011101010111100100000110011001010111101011100100001101000101101101100011011010100010000011100010011110100100001101100011010101111011100010110000010100101000011111011000010011000010101101110101110111101101110111000101001001111111000111001111011110111001010111110101010101111001101011010110001101010111011100110101111111100110011011011010100100100011110 1011001111011001111000010010010011001010010101101110001011011101100000000000001010101100101100101111111101001011110110101000000000111010010101110010000110010001110000011010001010101111001111001001010111011101101100101101011010000001000010110001000000010100010111001111000000011001111000100010001010111001111111011000101010000100011000100010100001100001101000110010100101010010110000110001100001100110 0001011101110010010010010011010010010010001011011011101011010111100100100110001011101001101000100111010100101001011111110011111110111010001110011011111101110001111111000110011000010100010011101111011010100100011101111111111000000110110001001010100011101100110010101110011011001100001111110011100001011011111010000000001001101001000101100111100011000011000001000101001100010000101110100000111101101111 0000101111110111010110111110100101011101000110111101101011101101001110000010011110001101010100110001110011011010110000010011011110110011100101101100011011001010111111010111010001010101001111000111110110101011000011110111101000110010101010111001001001001111010101100101101010011001101100001000111000100010101000101101111110101001000011010101101111010110111110001001100010110111000110110100110100000111 1111100000010010101111111110100010000101100011111001001001110011111110010111111100101000101010100100110110100010110111000011011101010111011011101101101110100010011000011010000101110011001101100101101000000001001111100001011111101101000000010111101000111100111100001110100101111000000011101111101111001000111100110001010001101111100000000111101000001011011000010011111011111110101111100110000100001110 1100111101010010111101011101000000010100001100011000001011100101110110010000111111010000100110011001001000000110110100101111110111110001001011110010011001000001111100110001101011010110101010101111101101101001111001101100100101110101111011011101010010110111111011111100100110001000000110111000101110110110110001001101001010111011111000110000000110000010111001111100000000001011010111011110101000011110 0011100100111000001001001111111110011010011011011000001110111000010100000001000001110111100010111000011111110010000010000000010011111001011001101011010011011010001011000101011000101110010101101000011010001111010011011010111000000000100010101110110001110000000000011011100010000100110110100101000010011110101000010100000110011100101110000000000011100111111001101001000000011011110011110011011001011110 0101010110100110010000111111001011001010110000001110110110011110011100100100100001100001011010001101110111000111000001010010100100111001111100000011010000010110010111111011010001111101011110001111100111000001001111111011001001010011010000011100110101100000101010110101100110011001001011100111001100001000101100011110110101111001100001000101010010011111001011110001001101101110011111101010010010101011 1100000110110101010111011000101110101000101110001100011100101111001110001000111101000110111101000010011011111100110110001000001100010010110011011111111000000011111001011111001111101100000111001011001100010100100101110000011011100011001000011010011101001110111101011011000000101101101111001110111011111101100100010010110111001000111011110110110100111000011001000001010111010110111001101110001111001011 0100010100011110111100011100010011110100101010110111100111000111011010110110001001001010110111100100010010011001010001111000001100111100110100010101100101101001101000111000001101110111100011111000100001100000001111011101110111100000100000000110001011001110010100010110100000111011110101001110011101000100100000011110010111011101101001010010100101111110100010100000011101110000011111100011111101100111 0011001001011110111101110001100100001100111101010011001011011111011000101001101001100011001110110111010001011000010000011101000010110100110100010110001110011100010001100010110101100011100111000011101000011100101110101000000001011101110111100110100100000011001001000100001110011011001111110000110001001001001001111101000000100110010110010101101110111101101010111000110011001111000110110000100111000010 1100000111100011011101111100110110001111001011000011101000011000001001111101000111101110111011000000111111100101010111000110010101000101110001110011011000010000010000000010001101001111001101111010111101011100010101011110111000110011110011101101000110001010010100011101010101111101110011010101100011001111101000101011110101001011000100000101001101100010000010101101010111110101100111001101000011110101 1011000001100011111100100000011011110110000000101001011111100000001010101011011100101011010100111001010001111100111001110000011101010100001010111110010110101101111000000111011111011001001101111010001000110011010111101010001001100110101001100010111101111001000111100101001100111110011001110100001011010111000101101011101110110110010000110000001110100000011000110111000010000000010011111010011110010100 1001001111110001110100011111111011110111101100011111001110011101110110010001010101010001100100000011000111100110110011111001011010000000000110100001111000100110111010000100000000110001111101110011010111010110100111110010001010101100101011001111110110100001101111001010001000000011100001101001001111011110100100010110110011111010011000100111010111011010111100100110010111111001001100011000100100001101 0000111110011000101110101011100101101010001010111000100101010100100101001101100110010110011111011001010011010011100100100011101010100100100111110011001110000101101101011001110001111111000100111100001110001100111110100001111001100010100111001100010110101001011000000010000000101111001010000100010101100100010110011011010100010111001110100110101101010111101010001011110110001111011110111111010001000110 0111001101110000101110010111110100001001000110100011000111011101100111000000111010011110011111101110101111010001111000101111000000011101010101100001011100111000000011100100101110010101010000001011011100110111111101000000100001100001100101110010111001100000100111110011001101111001110000101000010110111100100110101010010001101000000101011010010011111010110011101011111010011010010111010101011011000000 1111010010011111111111101101110111101111101100010011010001110111000101101110101111010110110000100000000011001010000111111100110001011110111111001001001010011000000010011100010110101101111010001001000110000101011100000011100011111110011110011100011010000111101000110000110101000001010001001010000101011110101101010101100100101110101011011011110100000110110100011010010010110000000001101001000111100100 0000110010011101101000100111110100010111100001110110010001011101011110001011100000111111011101100111110101110000110101111111100111111101110111111010011010101010100100010100110010110010010010101001111000000100111011011111001011101110111010000011010010101111110000011101111000001000001010100011111110111000010111101110111011011100111101101000000110100110101010100111011011100000011111001111110011101011 1011101110110010010010000000000011110000010001100100111111000101100110100000111010100001010000101110110000111101001111001010111000100011110010101010011000110011101001010111000101110110101111000100001100010000000101101110001001001101111010111011100011010000111100011100100101111001101111101010010000100101101011111101100001100110100110110100001000010110111101011010100111101010010010110110000001011010 0110001001001111010001101010111111100100111011000000101010101101010000111011011000101001110011110000101101111001010011100010100100001001011000100010101101000111001010010111111001010001011011100111001000110001000000100110011001101010100001100000000000100111010000000010111111000001001010110110001001101001101101110110010000111111001111010001011101110010111001100011101011101010110000111101110010101000 0010011001000101100001010100001010110011100000100010111101101110111011111000011110100010111111100110110010110100000001101000110011001100010100111101101000011110000001001111101110011111110110101010011101001100000000000011010001010110110100000000011100011101110111101000010101100100100110010010100011011001110110111000001011000101111001001111111011001011010111111001111100100111010001011111001011001000 0101001110111001010011011101101000001101010001100000001101110100011010001111101110010010101101001101110110110010110100111000111100101101100001101110101111001010011001011100000000100000101101100010001000000110101110111001101110010010001011100011100111010011101011000001000110110001110001010000011101010101000100110010110001111100011110100111000001110000111011010111111011010101110010111101111001111110 1110000011100010101001101011101000111000010100110101000010101010101000111000000011011110011111111110010110100010000011000110100010011010000101111010111001111000011100100011001000101111000000011001000111111101010110111011011000100101011101011110010011101001100000011000110110010000010010111011100011011010000010000101110111011100101010010110111011000001011011010100011000110101001000111011000000000101 1010100101011000111100011001010000001111110101000011100110010110100011010111100111001011111110010110010000111101110101001001100111011001100110001001000011011010010101001011011001101111010110011000001000011001001011001010110010111110011100001111110011000001010001001010100011011001000101111010010110000110110000110111110101100000001010110111110001000001011101010110000110100011000100111101111111001101 0110101110110101101010000111110000101101010000100010111011100100101110100001110111100011001011111001010101110110010011000101001101101010001111001011000000101000111110001000011010000110001010110101111110011110011110101000101000100000000101001111011011011111010101101010101010101111001101001011111101001100110100011011111110110001111000100111111010001111101110011101111010011010000010010001010010110100 1011101110111100010010111111000000100011000110101000010101011111001000000101111000100111110110111110100110011010001100010001111100010101011000001000110001001010000111110100010010010110100001011010100000111011110100000011011000111001011001010100010110111100011111010101111101100100100000001100110000001100111011010111010111100110000010000110011111100011001100111100000111001101101000111001011001111000 1001011100100000110111101011111111100010100111011100110011001110100011110101100011011110000101010100010100000101010100010111010101101010111000101001000111001111001101001111100010110010011111001110010001111011100101000001101000010010001000100000000010001101000010010101100011111000010110011011001001111000010000100101101110100011000000101110111110111011010010011100010010000010100010101110010100001111 1111101110011010110110000110100110110100101010110101101101001010100000110001011110000101001001000111100101010010100100011100001011111000011100011100001101000011101001010000110010101110001011100100011000100100001001010001110011100001000000111011111110010001001010100001011110100100011100011101001000101101110010011110001001010100111101111000001111110110011010011100001101100000011101100000001110001011 0111110101001110001010011110010010101100110110111011000011110110110011010101010000000110001011100001000011110011100000000100100010111100111001111000001111011101001000010100001001111011001110000011111100111001100111111010100001100000111000010101101110101010000011101101111011011101110100000010101010010000010011001000110101010100000010111101101010110111001000001011100000001101000101011100010011000110 1100111110010011111011101111010111001100010011101010100111100100011111101011000000010110000000111100001110100010000000111100110010001010010110001011111000110101101110001110111000100011000111001000011110110011110000010110010011100011001010100010110100001000010100111111100010010010100111010000010000000111101111110000011110010100010001000010111000100101010000010111001011110110100100111010110000011110 0000101011010110010110111001010001011100111110101100101011010110110011111110100001101100010110001010100110010000110100011001101111000101111101101111101110001000100111010000110011001000101110110110011111101100000110110111111001101100011111111001001111110110111110100011101111000111001001010001010111101001011100101101011100000000100101110010101000100100101110000110100100101000110111101101011001011100 1010000011010100101100010000100100101000111001101100011100100111011001011111001011110000001000100111001001110010110001001111101001101111001001111110010011010110001110010110011110101110100001101000000010110101000000111010000100110011100001101100011011100010010001001011000001000101011010001001001000110100101010100000101100000001000110011011110111010011100001010110111110110011011110101101110010011111 0110110010011100000100011100110001011011001010000100101010111111011111000100011000101110001011010101000001001110110100111011001101110001000110011001010100101110110011001001010011001101011001001010010000101001010010000101000001110111111101111110000101010010011011011001101100011101011011010100000111111110100100100000101000011111100000010010010000000101011011000101101011001100000100110010101111000100 0110011110111100110100010111100011010011101110011010011001111010100010101101111110011001010010100100001101000110111001110111110111111010101111001110101100101100110100111011000010111111001001011100100101110011110100001110011111001101100111001101110111111001001110001010011101010100010100011011110011101111001010110101110100010101101100011100110011110000001011001110010101001010110010001111010101011011 1101001000011000010000100111010111101010110011011100111000100011100000110101000011100101111011101011000001110011100100000110110001111011100110000100000010010100011101111100000110100101011001000011110101111000011110010011101001000110110110100010011111110001101101000111000111101011011110101100011001011011010000111001001111000100110010010111101000111010101000100100110111111000010111101110011111110000 1000101100100000100000101000100010000010111100011011101001111000110000011011110111111011111111010000000000100110111100001000001010111100111110010010001011110111011101100000111101110110101100001100010010101000101111000011010001110010101100100100011101000100101011000111101001111010101001110000110110001101111101010011010110101011101000110011111011000110010101111101010100111110011101011111101010011101 1000000110111001110011111100110010000000011100000111000100111011110001001011010110101010010110001101101000010100011001100011000001000100100011010001100001011010101011011100110110111001011000110010111110001100010011101000110000111001110110111100110011000011111000110101010101111001111000001100011011001001100001110101110111100101101110110001111101111000100001010101110101010110001010000010011111101000 1000111010011101110011100001100110110011011110100011101110010111000000011001001011111011001111101111101000110100100111011111010000110011111001100011101101010001110000000011111000000110110110000111110101100000010111001001111000101011110110010110011111101000110111111110110110000000001100000110111001001110011011101001100110011011101100010001100001000110000010101101101101010101101011010110100000010001 0010111010011001001000001101101001000001110100100101101110111101000111110011011000011101011110000010001110110111001011000010001100110111110111111111000101100110110010001010100110011010100100001010001100100111111101000000001010111100000100011010111101011010110001100000001111101000100011110110011011000000111010100101001011100011010011100001101000011000001101110101100000011000001010000101010011000010 1010001100001001001011010101110000101000011001000011100011100111001000111001111010101000110101110110110011110100110010101100010100111101000100101010001010000111011100010011000010001000111010100000011110010101001100001100010011011110010011101101110010010100011011110110111100001111000100110100101010001011010000111101110001100110010101101110010000010111011110101000010010010101001010111101100001100110 0001101001101110001101011101010101011100011111101100111111010100011001110100001100010001010011110011110111111010011011000101001111000101010000100111110111111110100000110100100101011010001001011001010100000110100010101011111010000001110010011011010110110110011101111011100000000000110010111010111110000011010000101100110000000111101111011101100111011100011100101010111100111110010111001111011101001001 1100110111110100101110010011100111111010110101000100010110010111000010110101100110100010110101001110001101100000111001001110100001111101001001001100001110001100100111100000001001000011001110101001010000110101101100100100010000000011101100100011111111010110111101101100110101000010111110011010011011001100011010011011000001111111100000111110111011001001011000001001111001010001010100010110011011000101 1100111010101111000000110001111110100000110100101101111110011011010101000000010100110010001001111100000100111011110100011111110111110101011111110011111110111000000001100010101010010010101111111111110001101010111011011110000101100000010001011101010011100110011010111111010111001011111110100111111001000111010000100110001111111000100010110000101100010011001010011010001010000111100011011111001011000010 1001011010100110000111000111011101110010011011011011010010011001000100001011110011000100100111101001000111011010110101011101010010100111111010000111110001010110100010011101010100000011011111111000110110110011110101001101001111111101100000111111000101101100011101001111100100010000000001111111000101100110110001101101010011001111000011010101011000010110000100011010100101100011111101001111111110011000 1111010011111110001010101011000101000010101110010011001100111000100011001010011111010000010110001000010001101011011100101000000001100101010011100000000111001001011010010110001010110010010001110101011000110100000000001001011110010000101001110111111110001110101101010001011110010101110100011110111001000010101100000101101011001001010010011110010111011011010001000101101110010010011110101001111100001011 1110000001111001111000110110100010011101001111100001100100111010110101100110101011111001110100011100001011110011000100111110010000110110000111110100101000001010110011001000010001011010101111001101111010000100111011111001010111010000001110111111110000001011011111011010001100111000111011011010001010001011011001011010110011001100110010001100101110001111001000010111001110000010101101101000101000101110 0010111010001000110111010000010001000000001010101000011100110101100000110011011101100101001101110101110111001101001010001100100010101010101000000110010001001001001010101011110101101110010111110100011000001101010001100100010111000111011110100110110101100110110110011010000110110111110110001001110001010101011110100010010101010111110001111010100101011011101011111100111101010100100100010010010000001011 0101010001111001110000011111000011111001101010111010000111010101101010100011001101000101010001101010101000010000100101011000100100001110111010110101110111110011001000110000111000110000101111110001111101111000010110010011011101100100100110010001001110101000101010000010100101000111101011110111000010000010000100101110011011011011101100101111011001010010100111001111010110111011101011000101011000101100 1001000110101011101011110100011011011111111000011101001011000110000010101010010100001110111101000011010010101011001000110010000111100101100101111000101101100011111010110111000000111101110001111011001001011111100000100011011101011000000100011010111010110010100101100011110010010001001101101110111011001010101111010101110011011111101111100001010100100100000101100101000010101001100110001001110101111010 0011001101011001101101100101001011000110011110101011001001001110000000011000101100011010100011101001010111101100101000111011011110101000101000101101100100111010111101001010001011111100001101011010010101010011100011100010001010000011101001111010101000000011110100111011100101110101001101100001110010011011001110101001101111101100111001011100110101101100001000101011001001111010101111000011100110100011 0001000000110111100010011011110001101000110000100001000111000110010101000100101100010000110101010111000110101100110111111110010110010111100110111111101110101100000100001000011010100100011110101011011000101100010000000011000001001100000101011110100000101111011100000011100100011101111110010111001100101111110111111010010100000101111010001100111101110010000000110110111011110001111101101111100101001011 1011100110000011110110111111010011111011100101010000000011101011101100000101111001100000011101100001111011011100101100011011011011010101100001000011011001110100100010000111000110010100111111010111011011001001100010010100011011010101111000111001010100010100111000111000001101111100110011111001001101000011011001110111100011001110010101111001110001001001000000010110010111101001101010100011000000000100 0010000110010110111010000001001111011010101110011010101010001011110110010111011000001001010101010001001110101010001111100111111001110001000110010100010001010010000010010011001111111101111010110100000100010011111100100010100110110001100111000010100011101100010111001111110110101100011001110101101011101011010100111000101111000101111111111000011010001110101100001001110011110010000000111000110110010000 1110000001010110110000000110100000011101010101110001011011010101101110001101100000001011111001111100001010100111111110011111111011010100011110011101101011100101111110001010010111110001010001111101001110010001011111011111011011110100000011000111101110001100010011000101110101000100011111101000111101110101101111101100010111010011010010111111110110100111111000011111110000011000000010111010111110101110 1010101011100100111101010010000001100000110011011010100010011111000101001000111101100000100101101001110000100000110110011100101011110110011111111101101001011001111011111111010000101001100001000101111111111100001111101011001101110011000000001001011100000111110111000000010110011111111010010000111001001000000100011010010011100011010010100111111001010010101110110001010110110010000000100100101010110001 1001110110100001010100010100011000101100111010001001110101010110101101101010100100011101011100110001011011010100001111000011001011001011001110110111000010010000111101111110100100010111001011100010110110011011110000000001101011000001001011100000111000101101000000101100000000110010010111001010000110111101100001110001111010011010111110010100101110010101110010011110110010011111001001010000010110100001 1110001101001100100101011011110010111100110000001011110100101101101001101110001101010110001110001010011011111111010110011100101110010000100110001101001111001010001100010010001111110110010100111111111100101001001010011101011101111101010111100101111000110100101011110001100000000101101000110100111100100100100000100101011000000000110100100110001010011001101101110111101100111001000010111010110111100101 1011000000001110111001110110110011010100101001010111001010010111101111011111101011000011001001011110101011110101011010011101001100101100100010000111111110001111010100111011111000001110111110010011100001101111100000111001001000101010001100010001100001110111010011011110110000101111111011011000011110010011101010001011111111110010010001111010001100111100000110010110001101111111001011000001011000111101 0101001001001111001110110001100111101111110010100011001001100001111100001101101101010110111100000101101110001011000010001010011111101100111100110011010111011011011000110010111000010010001000011010010010101101110001011011010100011011100110100011101010110011001011100101011111011011100100001011100110111010011100011100101010011001011011010010010011101101010110011110101100001011101101010000110101010110 1000101011110101010101001001111000001100010101000010001101101111110101100001111010001100100010100010111101001110101000010001100100110000001111001001100010101001100101001100010111101010101010111110011101111000010011110100101100101111000000111001011011010001000011110000101011001100101111000001110000100111111110011101100100000010111110010001001000111101010011100000110111001000101010010111100001011010 0110100001101101000101011111101111111101010101000010110011101100001110010111001101010001000000110010110101001000110111001011010001011000101010101100111111110101001000101101110110011010010000010100011000001010000000110101101011010001111101110101110100101001001111011111010011011100000001011001011101110101110001100001001110000110110101001001011100000001110010001000010011111001000000001000010111101000 1001110011111001011010010011101111100001000101010110011000111110110100010011000010011100100111011111100011000101001101011011000011011111110110111100110010011001011101101100010010010111101010001011011011100100101111001000110010100001011011100010011011001111001101010101001100100111111011000111100111101010000001100000011000011110011111000000101101000000100111100101010101001011110000100100000110111100 1110110001100111000110100101101000110100001001001110100111111110001111101010111001110010000100110111010111000100101110000110001000001100010101100000010101011100110011111100100001100100001000000111010111110001000110001001000010001000101111100111010011010101100000010000111101101010011110101111001101010001101111111110001100110001011001000010110110011001100110111011101011001010000000111011111000101001 0100001000010000011000011010111011000101111001011100101110101010111001010110010101010000111010110111110000110001100001000001010001000110111001101111111101100001100001110001001110000111000100100011110011000101010101101100011011000100000110011001001111011101000100110111011001001110100001110110000000100010110100000101010001000000011111011101000100011111101111110000001000000101011110101110011000010000 1110100101101100110110011111110001111001110101110111111101011111101010011101100100111110111111011100110010100000011101110010101000000010110101011001010110101100001101110011101110111101110100111011110000110011101001000110001111000111101110001110011000010011010101101100000110110101000111111001001000011011111111101111010001011100111010000100000010101000100100011111100000100100010010100110000001110001 0110001101000010000111101100100000111110100111111100001010101011100011100101010110101111011000000000010100101100101110001010001011001011010011010100001100100110010010000000011010110111010101001011010100111010010010111111010010011010100100011101001100111000111110010001001110010001111010110010000101000010101110100000001000000111100101101000011010000101000110111111010001010101110000001100110010101111 1111110100110000110011000110010110000110110101110110010000101011101111101000101011000100111100001011011001001111111000101111101110001010110000001000000101100001000100010000000110101010101001110101101000110000011000010110010110110010010110111010100011000111000001100000010011011001000110100111011101001011000000101111010101001001011000001101001001000000110111011111001001100011101010011111011001000000 0011100010110001010110000010101010001001100110011010010010100010001011010001010110110100001000111100001001100110111110011110011110000111010000000100100110001000110100001110111011111000010111010001001110001110010111111100001100111110101111000111100000111000010101110011100111100001000001111110010010011111100100110111100001110010101001000100101111111100001000001001101110111010111100110101000001010000 0011001011110110001101101100011011111001000111000011100011001101000110111000000110001000010010001010010001000010010101101101000001001001100001101100011101111111100110010111100011000110100101100101111001010010110110110101001011000010100111110100000011011001010111111011100000001001000000000001000101011010111100111000010001101011010110110111001001011011000000100100111111011001001101111010100011011001 0110010000100101110110010101001010010100111110001010010101011101010011010111111000100101100001001100010100100100100111011011110011011101100000001100100111010001111110000010001100001101000000100011010001001000010111101000100110111011111000100000111011010001101011011000110100101000000001100001110101010110110011000110001100111110001110110101011110100000001011110101101101110101011000110101001101111101 0011100001100001010110110100111000111010010011101110010111000100000010101001001010100000000000001000001000011100011011100100101111000110000000011101000000111111010101000010000101101001001101100001100110100000010101011000011110101010101001011000010001011100111010010011111010001011000001001010011110101111000000001110000000000101010110010101111001101110111011000011010111011001000111000110010011111001 0010101001101010010000001010100110100111100001011110101000100110011001101111001111000111011001111010011000110010100010110001010011110001111101100111001010000000001010100110001000100111000010001000101110101000111100000100110000010100011011110011110001110101100110111011111100101101100001001010000110100011011000110111000101001010001011011011111110110110101000110101110011110110001111011011011011000101 1010101010001101000100001011010001110001110001011110011101000100000010010101110001110001101101010110101110101110000111010101010110011001111000110111101100011000110010001111000100000110111110100010010111100011001001011100101110001100100111011001011101010000101110011010011110110110101101001100110101011111000101000010000110110000101111110011000000001001101011001000111011101110101010110001100101100001 1101100111010011111000011101000100100001111010111111111111001001100000011001000101100101000111000100101011011010101111010101110110100000000111110101110010011111111111110010001001011010011111001101111000000110011000111101010100100011110101000001010100110000100101110110111110110001100011110110110011101000111101111101111011110001100100001100111011101100100010011010111100110011000100101011010000110010 1011000100000000000100101010100100010001101111001001101110000000111001111010000000100010010101001011100101111001000000100100001010110011110011110101101010100111010011001100010000001001000101011101001011010110110001111101100001000111010100001000010001010100111001110100101001100010101101001100010101101010000111011001000000101010001110101000110000011001001000010011111011101101101001000110010111011011 1100111111110111111000001100110101101010101101101011001011101100010110011001001111001011001000101111100110111100100000011100100000011101010010101101011011011001101100100000101011011100100110010011111110110011010110010101111101111011100000100000000111101110110100011011110101111011000101111010100100110100100010101101100001010011001111000010000101100010110011111101001110011000000001000010100100000000 1101000100011000011101000100100001101001010001000101000100001010001111100110011110001011001111010101010011000001110110100110111101111100111011010011101100000110100101001001001110111011110001101101110001000000101000011010110110110011110000100010100000000111100001010101110011001010010000001011010011100001101001110010100110100111010111001110011000001110010000010000001011100000110111001011010011111100 0001110101011100110001011110010001110111010100000000001111110000000011010010101110100111100101101001110011010010010111101011010011011010011000010110010101100010100110100000110001111001100100110101101111110010101011101011000111110110100011000001011001110001001100001111001101000000011111011101000110111110000110001000111110101000101101110011111000100001011011101000111000011000000100100010101111111101 0011101001000100111110010111000001110000111001110010001010101011000100000101010000001011001000101000000110101100000000011101001010111101010001101011101001110110000011111111011101001100110011011111111011111110011100100110001001010101101011111100010100011001000101101001100010101011101010010100011011110110100111001101001011111001100111111011001010101110101110110101000100100110101100100100100101100010 0010100111011011011001100001100111110000100001100101110111100101001000001011100010100110000001100111110110100100111000101111101001001110000001001111111001000110110011000001010001001100011000010011001110010101100100101001011000010000100001010000001100111011101001110000001111000101101000100001010110101010101101100010101011001100100011010001100010101110001100011010111001100000101101010001001110010001 0101001001100011001110001000010100101011101010011000001101110011100000100011111111011111011000001001001010110111011111110010010010110111010001111110100110010010101001111111001010100011010100010000110100110101010001011101101110110110111101111011101010000000111000111011001100111110000010100100010111100000101101101111010111101011000011100101001010111111010011011110111011110101001111010100111010011000 0010000000111111011100100001111010001001001011111000010100000100110011101011001010101111101010100001111101011011110111111000011001101000111101000000111010111101000010010001100101111111000110110011111110101110011101110111010111110010101110010000100001101101111101000101000001001111010001010001100001011001100010100010000000001101111110011100011010011110001001111001010110010011001111001101000111100101 1001011001000011001111101111111111110011111110000010111010010100000010011010111100011111011111100101110011100001000001011011101101011111000111011100110000010101110010001011001000011111110001000110010111010001010001111000100000100110011100100010100010011110011001010111001101111110000010110101000100011111100110011011101110000000111111001000110101000110110011000110110110100101111110001011110011011101 0011111011011101000010101101100001000000010010111111110011001001000000011011001100010100011001100111001100110110011010001101110110001111101010010100110000000111000101011101001001100110111101011000010100101001011110110011000001111010101001001001111111100000010010000010001111010011011000001111011111110100000101101110100111100110110000111010100001101100100110110011001011111100001111110111010111111010 0010000010010001001010010001111010001100101011010100010000001100000011110100011110111000000100010100100011110101010001111000101111110010101110110011011010100001101100101001101000000101010110001000111100000111110111101101010001001010010111011101101111010100010011010001010110001111111011101011010011100111010000011010100011001011001011010001010110001001111011000111011101000011001000100101111001011001 0011001010110001011000100011101101011111010110001101010010000110110111110111010001010101100011110101011011001111001111100010100110001011100110000101100010111100010000101100001011011000111110010010100111100111101111000001101101001001111000011101001100101011100011000011110101000101111001001101010010111110000101101000110011010001010001100101001000010001001001100000111011000001100000011111100000010100 1001000001101101110111000000010000101100010100001000110111010010001111000010011001111011011101101001101000000111110110110010100000101100000010001011001101100011110101001000111011001011010010000110100100000111010100111110010010101011100100010010000110000110011100100000111101011010010111100001111000101101100010011000110111101000001101010010001011011011000101100011111100011000110110000100110000001011 1111000100011011100001010111001101100011011000101101011010100100101100011100110000100101000101111001011110110101011111000100001001111101100101100111000001111111110111000001100100110110110000101011011001001001011000010011011011100111100111110001000001110001010100101110011011001111011000111110001000010111010101000000001000110101000001010110101101001000000111001111011110100111111010100100110111110110 0101011001010001010111101110000010101010011011100110011010110000001100010100100011101011111000110000010111111110010010110100100110011111010001111101000110101111111001011001001101000010001100000011110011110000010110001101101111100111001000001010100101010001010101010100101011001110110011110000110100101101001011001101101111001011000011000001101101000000111100110111000111011101001111001000011100011000 0000111111000111100010100011011110110111101011110001100100001111001011011011101100000011110000010110000000010000111001001011010110101001111010000100001110101100010101111011000110010000100011101111010001010001000000001100100010011011000110101001010000011001111010000101010110111001000111101001011101001010011100000101001111010010010111100100100100100100100101000111000110111001111100001010010011011000
cTrader Algoシステムトレード

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

4/10/2021 12/18/2023

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

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

世の中にはいろいろなロジックの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

© 2026 ajinori