#include <iostream>

using namespace std;


// piece numberL, piece orientation/positionL, data 1/2.
long ap[] = {
   0x00000207L, 0x00000000L,  // XOX
   0x0000081cL, 0x00000000L,  //  X
   0x00002070L, 0x00000000L,
   0x00040e00L, 0x00000000L,
   0x00103800L, 0x00000000L,
   0x0040e000L, 0x00000000L,
   0x02070000L, 0x00000000L,
   0x081c0000L, 0x00000000L,
   0x20700000L, 0x00000000L,
   0x0e000000L, 0x00000004L,
   0x38000000L, 0x00000010L,
   0xe0000000L, 0x00000040L,
   0x00000000L, 0x00000207L,
   0x00000000L, 0x0000081cL,
   0x00000000L, 0x00002070L,
   0x00000000L, 0x00040e00L,
   0x00000000L, 0x00103800L,
   0x00000000L, 0x0040e000L,

   0x00040604L, 0x00000000L,  // X
   0x00101810L, 0x00000000L,  // OX
   0x00406040L, 0x00000000L,  // X
   0x02030200L, 0x00000000L,
   0x080c0800L, 0x00000000L,
   0x20302000L, 0x00000000L,
   0x80c08000L, 0x00000000L,
   0x06040000L, 0x00000004L,
   0x18100000L, 0x00000010L,
   0x60400000L, 0x00000040L,
   0x02000000L, 0x00000203L,
   0x08000000L, 0x0000080cL,
   0x20000000L, 0x00002030L,
   0x80000000L, 0x000080c0L,
   0x00000000L, 0x00040604L,
   0x00000000L, 0x00101810L,
   0x00000000L, 0x00406040L,

   0x00010301L, 0x00000000L,  //  X
   0x00040c04L, 0x00000000L,  // XO
   0x00103010L, 0x00000000L,  //  X
   0x0040c040L, 0x00000000L,
   0x02060200L, 0x00000000L,
   0x08180800L, 0x00000000L,
   0x20602000L, 0x00000000L,
   0x03010000L, 0x00000001L,
   0x0c040000L, 0x00000004L,
   0x30100000L, 0x00000010L,
   0xc0400000L, 0x00000040L,
   0x02000000L, 0x00000206L,
   0x08000000L, 0x00000818L,
   0x20000000L, 0x00002060L,
   0x00000000L, 0x00010301L,
   0x00000000L, 0x00040c04L,
   0x00000000L, 0x00103010L,
   0x00000000L, 0x0040c040L,

   0x00000e04L, 0x00000000L, //  X
   0x00003810L, 0x00000000L, // XOX
   0x0000e040L, 0x00000000L,
   0x00070200L, 0x00000000L,
   0x001c0800L, 0x00000000L,
   0x00702000L, 0x00000000L,
   0x0e040000L, 0x00000000L,
   0x38100000L, 0x00000000L,
   0xe0400000L, 0x00000000L,
   0x02000000L, 0x00000007L,
   0x08000000L, 0x0000001cL,
   0x20000000L, 0x00000070L,
   0x00000000L, 0x00000e04L,
   0x00000000L, 0x00003810L,
   0x00000000L, 0x0000e040L,
   0x00000000L, 0x00070200L,
   0x00000000L, 0x001c0800L,
   0x00000000L, 0x00702000L,
};
long bp[] = {
   0x0000040eL, 0x00000000L,  // OXO
   0x00001038L, 0x00000000L,  //  O
   0x000040e0L, 0x00000000L,
   0x00020700L, 0x00000000L,
   0x00081c00L, 0x00000000L,
   0x00207000L, 0x00000000L,
   0x040e0000L, 0x00000000L,
   0x10380000L, 0x00000000L,
   0x40e00000L, 0x00000000L,
   0x07000000L, 0x00000002L,
   0x1c000000L, 0x00000008L,
   0x70000000L, 0x00000020L,
   0x00000000L, 0x0000040eL,
   0x00000000L, 0x00001038L,
   0x00000000L, 0x000040e0L,
   0x00000000L, 0x00020700L,
   0x00000000L, 0x00081c00L,
   0x00000000L, 0x00207000L,

   0x00020602L, 0x00000000L,  //  O
   0x00081808L, 0x00000000L,  // OX
   0x00206020L, 0x00000000L,  //  O
   0x01030100L, 0x00000000L,
   0x040c0400L, 0x00000000L,
   0x10301000L, 0x00000000L,
   0x40c04000L, 0x00000000L,
   0x06020000L, 0x00000002L,
   0x18080000L, 0x00000008L,
   0x60200000L, 0x00000020L,
   0x01000000L, 0x00000103L,
   0x04000000L, 0x0000040cL,
   0x10000000L, 0x00001030L,
   0x40000000L, 0x000040c0L,
   0x00000000L, 0x00020602L,
   0x00000000L, 0x00081808L,
   0x00000000L, 0x00206020L,

   0x00020302L, 0x00000000L,  // O
   0x00080c08L, 0x00000000L,  // XO
   0x00203020L, 0x00000000L,  // O
   0x0080c080L, 0x00000000L,
   0x04060400L, 0x00000000L,
   0x10181000L, 0x00000000L,
   0x40604000L, 0x00000000L,
   0x03020000L, 0x00000002L,
   0x0c080000L, 0x00000008L,
   0x30200000L, 0x00000020L,
   0xc0800000L, 0x00000080L,
   0x04000000L, 0x00000406L,
   0x10000000L, 0x00001018L,
   0x40000000L, 0x00004060L,
   0x00000000L, 0x00020302L,
   0x00000000L, 0x00080c08L,
   0x00000000L, 0x00203020L,
   0x00000000L, 0x0080c080L,

   0x00000702L, 0x00000000L,  //  O
   0x00001c08L, 0x00000000L,  // OXO
   0x00007020L, 0x00000000L,
   0x000e0400L, 0x00000000L,
   0x00381000L, 0x00000000L,
   0x00e04000L, 0x00000000L,
   0x07020000L, 0x00000000L,
   0x1c080000L, 0x00000000L,
   0x70200000L, 0x00000000L,
   0x04000000L, 0x0000000eL,
   0x10000000L, 0x00000038L,
   0x40000000L, 0x000000e0L,
   0x00000000L, 0x00000702L,
   0x00000000L, 0x00001c08L,
   0x00000000L, 0x00007020L,
   0x00000000L, 0x000e0400L,
   0x00000000L, 0x00381000L,
   0x00000000L, 0x00e04000L,
};
long cp[] = {
   0x0000000fL, 0x00000000L,
   0x0000001eL, 0x00000000L,
   0x0000003cL, 0x00000000L,
   0x00000078L, 0x00000000L,
   0x000000f0L, 0x00000000L,
   0x00000f00L, 0x00000000L,
   0x00001e00L, 0x00000000L,
   0x00003c00L, 0x00000000L,
   0x00007800L, 0x00000000L,
   0x0000f000L, 0x00000000L,
   0x000f0000L, 0x00000000L,
   0x001e0000L, 0x00000000L,
   0x003c0000L, 0x00000000L,
   0x00780000L, 0x00000000L,
   0x00f00000L, 0x00000000L,
   0x0f000000L, 0x00000000L,
   0x1e000000L, 0x00000000L,
   0x3c000000L, 0x00000000L,
   0x78000000L, 0x00000000L,
   0xf0000000L, 0x00000000L,
   0x00000000L, 0x0000000fL,
   0x00000000L, 0x0000001eL,
   0x00000000L, 0x0000003cL,
   0x00000000L, 0x00000078L,
   0x00000000L, 0x000000f0L,
   0x00000000L, 0x00000f00L,
   0x00000000L, 0x00001e00L,
   0x00000000L, 0x00003c00L,
   0x00000000L, 0x00007800L,
   0x00000000L, 0x0000f000L,
   0x00000000L, 0x000f0000L,
   0x00000000L, 0x001e0000L,
   0x00000000L, 0x003c0000L,
   0x00000000L, 0x00780000L,
   0x00000000L, 0x00f00000L,

   0x01010101L, 0x00000000L,
   0x02020202L, 0x00000000L,
   0x04040404L, 0x00000000L,
   0x08080808L, 0x00000000L,
   0x10101010L, 0x00000000L,
   0x20202020L, 0x00000000L,
   0x40404040L, 0x00000000L,
   0x80808080L, 0x00000000L,
   0x01010100L, 0x00000001L,
   0x02020200L, 0x00000002L,
   0x04040400L, 0x00000004L,
   0x08080800L, 0x00000008L,
   0x10101000L, 0x00000010L,
   0x20202000L, 0x00000020L,
   0x40404000L, 0x00000040L,
   0x80808000L, 0x00000080L,
   0x01010000L, 0x00000101L,
   0x02020000L, 0x00000202L,
   0x04040000L, 0x00000404L,
   0x08080000L, 0x00000808L,
   0x10100000L, 0x00001010L,
   0x20200000L, 0x00002020L,
   0x40400000L, 0x00004040L,
   0x80800000L, 0x00008080L,
   0x01000000L, 0x00010101L,
   0x02000000L, 0x00020202L,
   0x04000000L, 0x00040404L,
   0x08000000L, 0x00080808L,
   0x10000000L, 0x00101010L,
   0x20000000L, 0x00202020L,
   0x40000000L, 0x00404040L,
   0x80000000L, 0x00808080L,
};
long dp[] = {
   0x00000603L, 0x00000000L,
   0x00000c06L, 0x00000000L,
   0x0000180cL, 0x00000000L,
   0x00003018L, 0x00000000L,
   0x00006030L, 0x00000000L,
   0x0000c060L, 0x00000000L,
   0x00060300L, 0x00000000L,
   0x000c0600L, 0x00000000L,
   0x00180c00L, 0x00000000L,
   0x00301800L, 0x00000000L,
   0x00603000L, 0x00000000L,
   0x00c06000L, 0x00000000L,
   0x06030000L, 0x00000000L,
   0x0c060000L, 0x00000000L,
   0x180c0000L, 0x00000000L,
   0x30180000L, 0x00000000L,
   0x60300000L, 0x00000000L,
   0xc0600000L, 0x00000000L,
   0x03000000L, 0x00000006L,
   0x06000000L, 0x0000000cL,
   0x0c000000L, 0x00000018L,
   0x18000000L, 0x00000030L,
   0x30000000L, 0x00000060L,
   0x60000000L, 0x000000c0L,
   0x00000000L, 0x00000603L,
   0x00000000L, 0x00000c06L,
   0x00000000L, 0x0000180cL,
   0x00000000L, 0x00003018L,
   0x00000000L, 0x00006030L,
   0x00000000L, 0x0000c060L,
   0x00000000L, 0x00060300L,
   0x00000000L, 0x000c0600L,
   0x00000000L, 0x00180c00L,
   0x00000000L, 0x00301800L,
   0x00000000L, 0x00603000L,
   0x00000000L, 0x00c06000L,

   0x00010302L, 0x00000000L,
   0x00020604L, 0x00000000L,
   0x00040c08L, 0x00000000L,
   0x00081810L, 0x00000000L,
   0x00103020L, 0x00000000L,
   0x00206040L, 0x00000000L,
   0x0040c080L, 0x00000000L,
   0x01030200L, 0x00000000L,
   0x02060400L, 0x00000000L,
   0x040c0800L, 0x00000000L,
   0x08181000L, 0x00000000L,
   0x10302000L, 0x00000000L,
   0x20604000L, 0x00000000L,
   0x40c08000L, 0x00000000L,
   0x03020000L, 0x00000001L,
   0x06040000L, 0x00000002L,
   0x0c080000L, 0x00000004L,
   0x18100000L, 0x00000008L,
   0x30200000L, 0x00000010L,
   0x60400000L, 0x00000020L,
   0xc0800000L, 0x00000040L,
   0x02000000L, 0x00000103L,
   0x04000000L, 0x00000206L,
   0x08000000L, 0x0000040cL,
   0x10000000L, 0x00000818L,
   0x20000000L, 0x00001030L,
   0x40000000L, 0x00002060L,
   0x80000000L, 0x000040c0L,
   0x00000000L, 0x00010302L,
   0x00000000L, 0x00020604L,
   0x00000000L, 0x00040c08L,
   0x00000000L, 0x00081810L,
   0x00000000L, 0x00103020L,
   0x00000000L, 0x00206040L,
   0x00000000L, 0x0040c080L,
};
long ep[] = {
   0x00000306L, 0x00000000L,
   0x0000060cL, 0x00000000L,
   0x00000c18L, 0x00000000L,
   0x00001830L, 0x00000000L,
   0x00003060L, 0x00000000L,
   0x000060c0L, 0x00000000L,
   0x00030600L, 0x00000000L,
   0x00060c00L, 0x00000000L,
   0x000c1800L, 0x00000000L,
   0x00183000L, 0x00000000L,
   0x00306000L, 0x00000000L,
   0x0060c000L, 0x00000000L,
   0x03060000L, 0x00000000L,
   0x060c0000L, 0x00000000L,
   0x0c180000L, 0x00000000L,
   0x18300000L, 0x00000000L,
   0x30600000L, 0x00000000L,
   0x60c00000L, 0x00000000L,
   0x06000000L, 0x00000003L,
   0x0c000000L, 0x00000006L,
   0x18000000L, 0x0000000cL,
   0x30000000L, 0x00000018L,
   0x60000000L, 0x00000030L,
   0xc0000000L, 0x00000060L,
   0x00000000L, 0x00000306L,
   0x00000000L, 0x0000060cL,
   0x00000000L, 0x00000c18L,
   0x00000000L, 0x00001830L,
   0x00000000L, 0x00003060L,
   0x00000000L, 0x000060c0L,
   0x00000000L, 0x00030600L,
   0x00000000L, 0x00060c00L,
   0x00000000L, 0x000c1800L,
   0x00000000L, 0x00183000L,
   0x00000000L, 0x00306000L,
   0x00000000L, 0x0060c000L,

   0x00020301L, 0x00000000L,
   0x00040602L, 0x00000000L,
   0x00080c04L, 0x00000000L,
   0x00101808L, 0x00000000L,
   0x00203010L, 0x00000000L,
   0x00406020L, 0x00000000L,
   0x0080c040L, 0x00000000L,
   0x02030100L, 0x00000000L,
   0x04060200L, 0x00000000L,
   0x080c0400L, 0x00000000L,
   0x10180800L, 0x00000000L,
   0x20301000L, 0x00000000L,
   0x40602000L, 0x00000000L,
   0x80c04000L, 0x00000000L,
   0x03010000L, 0x00000002L,
   0x06020000L, 0x00000004L,
   0x0c040000L, 0x00000008L,
   0x18080000L, 0x00000010L,
   0x30100000L, 0x00000020L,
   0x60200000L, 0x00000040L,
   0xc0400000L, 0x00000080L,
   0x01000000L, 0x00000203L,
   0x02000000L, 0x00000406L,
   0x04000000L, 0x0000080cL,
   0x08000000L, 0x00001018L,
   0x10000000L, 0x00002030L,
   0x20000000L, 0x00004060L,
   0x40000000L, 0x000080c0L,
   0x00000000L, 0x00020301L,
   0x00000000L, 0x00040602L,
   0x00000000L, 0x00080c04L,
   0x00000000L, 0x00101808L,
   0x00000000L, 0x00203010L,
   0x00000000L, 0x00406020L,
   0x00000000L, 0x0080c040L,
};
long fp[] = {
   0x00000701L, 0x00000000L,  //   X
   0x00001c04L, 0x00000000L,  // OXO
   0x00007010L, 0x00000000L,
   0x000e0200L, 0x00000000L,
   0x00380800L, 0x00000000L,
   0x00e02000L, 0x00000000L,
   0x07010000L, 0x00000000L,
   0x1c040000L, 0x00000000L,
   0x70100000L, 0x00000000L,
   0x02000000L, 0x0000000eL,
   0x08000000L, 0x00000038L,
   0x20000000L, 0x000000e0L,
   0x00000000L, 0x00000701L,
   0x00000000L, 0x00001c04L,
   0x00000000L, 0x00007010L,
   0x00000000L, 0x000e0200L,
   0x00000000L, 0x00380800L,
   0x00000000L, 0x00e02000L,

   0x00030202L, 0x00000000L,  // O
   0x000c0808L, 0x00000000L,  // X
   0x00302020L, 0x00000000L,  // OX
   0x00c08080L, 0x00000000L,
   0x06040400L, 0x00000000L,
   0x18101000L, 0x00000000L,
   0x60404000L, 0x00000000L,
   0x02020000L, 0x00000003L,
   0x08080000L, 0x0000000cL,
   0x20200000L, 0x00000030L,
   0x80800000L, 0x000000c0L,
   0x04000000L, 0x00000604L,
   0x10000000L, 0x00001810L,
   0x40000000L, 0x00006040L,
   0x00000000L, 0x00030202L,
   0x00000000L, 0x000c0808L,
   0x00000000L, 0x00302020L,
   0x00000000L, 0x00c08080L,

   0x00020206L, 0x00000000L, // XO
   0x00080818L, 0x00000000L, //  X
   0x00202060L, 0x00000000L, //  O
   0x01010300L, 0x00000000L,
   0x04040c00L, 0x00000000L,
   0x10103000L, 0x00000000L,
   0x4040c000L, 0x00000000L,
   0x02060000L, 0x00000002L,
   0x08180000L, 0x00000008L,
   0x20600000L, 0x00000020L,
   0x03000000L, 0x00000101L,
   0x0c000000L, 0x00000404L,
   0x30000000L, 0x00001010L,
   0xc0000000L, 0x00004040L,
   0x00000000L, 0x00020206L,
   0x00000000L, 0x00080818L,
   0x00000000L, 0x00202060L,

   0x0000080eL, 0x00000000L, // OXO
   0x00002038L, 0x00000000L, // X
   0x000080e0L, 0x00000000L,
   0x00040700L, 0x00000000L,
   0x00101c00L, 0x00000000L,
   0x00407000L, 0x00000000L,
   0x080e0000L, 0x00000000L,
   0x20380000L, 0x00000000L,
   0x80e00000L, 0x00000000L,
   0x07000000L, 0x00000004L,
   0x1c000000L, 0x00000010L,
   0x70000000L, 0x00000040L,
   0x00000000L, 0x0000080eL,
   0x00000000L, 0x00002038L,
   0x00000000L, 0x000080e0L,
   0x00000000L, 0x00040700L,
   0x00000000L, 0x00101c00L,
   0x00000000L, 0x00407000L,
};
long gp[] = {
   0x00000107L, 0x00000000L,  // XOX
   0x0000041cL, 0x00000000L,  //   O
   0x00001070L, 0x00000000L,
   0x00020e00L, 0x00000000L,
   0x00083800L, 0x00000000L,
   0x0020e000L, 0x00000000L,
   0x01070000L, 0x00000000L,
   0x041c0000L, 0x00000000L,
   0x10700000L, 0x00000000L,
   0x0e000000L, 0x00000002L,
   0x38000000L, 0x00000008L,
   0xe0000000L, 0x00000020L,
   0x00000000L, 0x00000107L,
   0x00000000L, 0x0000041cL,
   0x00000000L, 0x00001070L,
   0x00000000L, 0x00020e00L,
   0x00000000L, 0x00083800L,
   0x00000000L, 0x0020e000L,

   0x00030101L, 0x00000000L,  //  X
   0x000c0404L, 0x00000000L,  //  O
   0x00301010L, 0x00000000L,  // OX
   0x00c04040L, 0x00000000L,
   0x06020200L, 0x00000000L,
   0x18080800L, 0x00000000L,
   0x60202000L, 0x00000000L,
   0x01010000L, 0x00000003L,
   0x04040000L, 0x0000000cL,
   0x10100000L, 0x00000030L,
   0x40400000L, 0x000000c0L,
   0x02000000L, 0x00000602L,
   0x08000000L, 0x00001808L,
   0x20000000L, 0x00006020L,
   0x00000000L, 0x00030101L,
   0x00000000L, 0x000c0404L,
   0x00000000L, 0x00301010L,
   0x00000000L, 0x00c04040L,

   0x00040406L, 0x00000000L, // XO
   0x00101018L, 0x00000000L, // O
   0x00404060L, 0x00000000L, // X
   0x02020300L, 0x00000000L,
   0x08080c00L, 0x00000000L,
   0x20203000L, 0x00000000L,
   0x8080c000L, 0x00000000L,
   0x04060000L, 0x00000004L,
   0x10180000L, 0x00000010L,
   0x40600000L, 0x00000040L,
   0x03000000L, 0x00000202L,
   0x0c000000L, 0x00000808L,
   0x30000000L, 0x00002020L,
   0xc0000000L, 0x00008080L,
   0x00000000L, 0x00040406L,
   0x00000000L, 0x00101018L,
   0x00000000L, 0x00404060L,

   0x00000e08L, 0x00000000L, // O
   0x00003820L, 0x00000000L, // XOX
   0x0000e080L, 0x00000000L,
   0x00070400L, 0x00000000L,
   0x001c1000L, 0x00000000L,
   0x00704000L, 0x00000000L,
   0x0e080000L, 0x00000000L,
   0x38200000L, 0x00000000L,
   0xe0800000L, 0x00000000L,
   0x04000000L, 0x00000007L,
   0x10000000L, 0x0000001cL,
   0x40000000L, 0x00000070L,
   0x00000000L, 0x00000e08L,
   0x00000000L, 0x00003820L,
   0x00000000L, 0x0000e080L,
   0x00000000L, 0x00070400L,
   0x00000000L, 0x001c1000L,
   0x00000000L, 0x00704000L,
};
long hp[] = {
   0x00000704L, 0x00000000L,  // X 
   0x00001c10L, 0x00000000L,  // OXO
   0x00007040L, 0x00000000L,
   0x000e0800L, 0x00000000L,
   0x00382000L, 0x00000000L,
   0x00e08000L, 0x00000000L,
   0x07040000L, 0x00000000L,
   0x1c100000L, 0x00000000L,
   0x70400000L, 0x00000000L,
   0x08000000L, 0x0000000eL,
   0x20000000L, 0x00000038L,
   0x80000000L, 0x000000e0L,
   0x00000000L, 0x00000704L,
   0x00000000L, 0x00001c10L,
   0x00000000L, 0x00007040L,
   0x00000000L, 0x000e0800L,
   0x00000000L, 0x00382000L,
   0x00000000L, 0x00e08000L,

   0x00020203L, 0x00000000L, // OX
   0x0008080cL, 0x00000000L, // X
   0x00202030L, 0x00000000L, // O
   0x008080c0L, 0x00000000L,
   0x04040600L, 0x00000000L,
   0x10101800L, 0x00000000L,
   0x40406000L, 0x00000000L,
   0x02030000L, 0x00000002L,
   0x080c0000L, 0x00000008L,
   0x20300000L, 0x00000020L,
   0x80c00000L, 0x00000080L,
   0x06000000L, 0x00000404L,
   0x18000000L, 0x00001010L,
   0x60000000L, 0x00004040L,
   0x00000000L, 0x00020203L,
   0x00000000L, 0x0008080cL,
   0x00000000L, 0x00202030L,
   0x00000000L, 0x008080c0L,

   0x00060202L, 0x00000000L, //  O
   0x00180808L, 0x00000000L, //  X
   0x00602020L, 0x00000000L, // XO
   0x03010100L, 0x00000000L,
   0x0c040400L, 0x00000000L,
   0x30101000L, 0x00000000L,
   0xc0404000L, 0x00000000L,
   0x02020000L, 0x00000006L,
   0x08080000L, 0x00000018L,
   0x20200000L, 0x00000060L,
   0x01000000L, 0x00000301L,
   0x04000000L, 0x00000c04L,
   0x10000000L, 0x00003010L,
   0x40000000L, 0x0000c040L,
   0x00000000L, 0x00060202L,
   0x00000000L, 0x00180808L,
   0x00000000L, 0x00602020L,

   0x0000020eL, 0x00000000L, // OXO
   0x00000838L, 0x00000000L, //   X
   0x000020e0L, 0x00000000L,
   0x00010700L, 0x00000000L,
   0x00041c00L, 0x00000000L,
   0x00107000L, 0x00000000L,
   0x020e0000L, 0x00000000L,
   0x08380000L, 0x00000000L,
   0x20e00000L, 0x00000000L,
   0x07000000L, 0x00000001L,
   0x1c000000L, 0x00000004L,
   0x70000000L, 0x00000010L,
   0x00000000L, 0x0000020eL,
   0x00000000L, 0x00000838L,
   0x00000000L, 0x000020e0L,
   0x00000000L, 0x00010700L,
   0x00000000L, 0x00041c00L,
   0x00000000L, 0x00107000L,
};
long ip[] = {
   0x00000407L, 0x00000000L,  // XOX
   0x0000101cL, 0x00000000L,  // O
   0x00004070L, 0x00000000L,
   0x00080e00L, 0x00000000L,
   0x00203800L, 0x00000000L,
   0x0080e000L, 0x00000000L,
   0x04070000L, 0x00000000L,
   0x101c0000L, 0x00000000L,
   0x40700000L, 0x00000000L,
   0x0e000000L, 0x00000008L,
   0x38000000L, 0x00000020L,
   0xe0000000L, 0x00000080L,
   0x00000000L, 0x00000407L,
   0x00000000L, 0x0000101cL,
   0x00000000L, 0x00004070L,
   0x00000000L, 0x00080e00L,
   0x00000000L, 0x00203800L,
   0x00000000L, 0x0080e000L,

   0x00010103L, 0x00000000L, // OX
   0x0004040cL, 0x00000000L, //  O
   0x00101030L, 0x00000000L, //  X
   0x004040c0L, 0x00000000L,
   0x02020600L, 0x00000000L,
   0x08081800L, 0x00000000L,
   0x20206000L, 0x00000000L,
   0x01030000L, 0x00000001L,
   0x040c0000L, 0x00000004L,
   0x10300000L, 0x00000010L,
   0x40c00000L, 0x00000040L,
   0x06000000L, 0x00000202L,
   0x18000000L, 0x00000808L,
   0x60000000L, 0x00002020L,
   0x00000000L, 0x00010103L,
   0x00000000L, 0x0004040cL,
   0x00000000L, 0x00101030L,
   0x00000000L, 0x004040c0L,

   0x00060404L, 0x00000000L, // X
   0x00181010L, 0x00000000L, // O
   0x00604040L, 0x00000000L, // XO
   0x03020200L, 0x00000000L,
   0x0c080800L, 0x00000000L,
   0x30202000L, 0x00000000L,
   0xc0808000L, 0x00000000L,
   0x04040000L, 0x00000006L,
   0x10100000L, 0x00000018L,
   0x40400000L, 0x00000060L,
   0x02000000L, 0x00000302L,
   0x08000000L, 0x00000c08L,
   0x20000000L, 0x00003020L,
   0x80000000L, 0x0000c080L,
   0x00000000L, 0x00060404L,
   0x00000000L, 0x00181010L,
   0x00000000L, 0x00604040L,

   0x00000e02L, 0x00000000L,  //   O
   0x00003808L, 0x00000000L,  // XOX
   0x0000e020L, 0x00000000L,
   0x00070100L, 0x00000000L,
   0x001c0400L, 0x00000000L,
   0x00701000L, 0x00000000L,
   0x0e020000L, 0x00000000L,
   0x38080000L, 0x00000000L,
   0xe0200000L, 0x00000000L,
   0x01000000L, 0x00000007L,
   0x04000000L, 0x0000001cL,
   0x10000000L, 0x00000070L,
   0x00000000L, 0x00000e02L,
   0x00000000L, 0x00003808L,
   0x00000000L, 0x0000e020L,
   0x00000000L, 0x00070100L,
   0x00000000L, 0x001c0400L,
   0x00000000L, 0x00701000L,
};
long jp[] = {
   0x00000303L, 0x00000000L,
   0x00000606L, 0x00000000L,
   0x00000c0cL, 0x00000000L,
   0x00001818L, 0x00000000L,
   0x00003030L, 0x00000000L,
   0x00006060L, 0x00000000L,
   0x0000c0c0L, 0x00000000L,
   0x00030300L, 0x00000000L,
   0x00060600L, 0x00000000L,
   0x000c0c00L, 0x00000000L,
   0x00181800L, 0x00000000L,
   0x00303000L, 0x00000000L,
   0x00606000L, 0x00000000L,
   0x00c0c000L, 0x00000000L,
   0x03030000L, 0x00000000L,
   0x06060000L, 0x00000000L,
   0x0c0c0000L, 0x00000000L,
   0x18180000L, 0x00000000L,
   0x30300000L, 0x00000000L,
   0x60600000L, 0x00000000L,
   0xc0c00000L, 0x00000000L,
   0x03000000L, 0x00000003L,
   0x06000000L, 0x00000006L,
   0x0c000000L, 0x0000000cL,
   0x18000000L, 0x00000018L,
   0x30000000L, 0x00000030L,
   0x60000000L, 0x00000060L,
   0xc0000000L, 0x000000c0L,
   0x00000000L, 0x00000303L,
   0x00000000L, 0x00000606L,
   0x00000000L, 0x00000c0cL,
   0x00000000L, 0x00001818L,
   0x00000000L, 0x00003030L,
   0x00000000L, 0x00006060L,
   0x00000000L, 0x0000c0c0L,
   0x00000000L, 0x00030300L,
   0x00000000L, 0x00060600L,
   0x00000000L, 0x000c0c00L,
   0x00000000L, 0x00181800L,
   0x00000000L, 0x00303000L,
   0x00000000L, 0x00606000L,
   0x00000000L, 0x00c0c000L,

};
long kp[] = {
   0x00000203L, 0x00000000L,  // OX
   0x0000080cL, 0x00000000L,  // X
   0x00002030L, 0x00000000L,
   0x000080c0L, 0x00000000L,
   0x00040600L, 0x00000000L,
   0x00101800L, 0x00000000L,
   0x00406000L, 0x00000000L,
   0x02030000L, 0x00000000L,
   0x080c0000L, 0x00000000L,
   0x20300000L, 0x00000000L,
   0x80c00000L, 0x00000000L,
   0x06000000L, 0x00000004L,
   0x18000000L, 0x00000010L,
   0x60000000L, 0x00000040L,
   0x00000000L, 0x00000203L,
   0x00000000L, 0x0000080cL,
   0x00000000L, 0x00002030L,
   0x00000000L, 0x000080c0L,
   0x00000000L, 0x00040600L,
   0x00000000L, 0x00101800L,
   0x00000000L, 0x00406000L,

   0x00000301L, 0x00000000L,  //  X
   0x00000c04L, 0x00000000L,  // XO
   0x00003010L, 0x00000000L,
   0x0000c040L, 0x00000000L,
   0x00060200L, 0x00000000L,
   0x00180800L, 0x00000000L,
   0x00602000L, 0x00000000L,
   0x03010000L, 0x00000000L,
   0x0c040000L, 0x00000000L,
   0x30100000L, 0x00000000L,
   0xc0400000L, 0x00000000L,
   0x02000000L, 0x00000006L,
   0x08000000L, 0x00000018L,
   0x20000000L, 0x00000060L,
   0x00000000L, 0x00000301L,
   0x00000000L, 0x00000c04L,
   0x00000000L, 0x00003010L,
   0x00000000L, 0x0000c040L,
   0x00000000L, 0x00060200L,
   0x00000000L, 0x00180800L,
   0x00000000L, 0x00602000L,

   0x00000604L, 0x00000000L, // X
   0x00001810L, 0x00000000L, // OX
   0x00006040L, 0x00000000L,
   0x00030200L, 0x00000000L,
   0x000c0800L, 0x00000000L,
   0x00302000L, 0x00000000L,
   0x00c08000L, 0x00000000L,
   0x06040000L, 0x00000000L,
   0x18100000L, 0x00000000L,
   0x60400000L, 0x00000000L,
   0x02000000L, 0x00000003L,
   0x08000000L, 0x0000000cL,
   0x20000000L, 0x00000030L,
   0x80000000L, 0x000000c0L,
   0x00000000L, 0x00000604L,
   0x00000000L, 0x00001810L,
   0x00000000L, 0x00006040L,
   0x00000000L, 0x00030200L,
   0x00000000L, 0x000c0800L,
   0x00000000L, 0x00302000L,
   0x00000000L, 0x00c08000L,

   0x00000206L, 0x00000000L, // XO
   0x00000818L, 0x00000000L, //  X
   0x00002060L, 0x00000000L,
   0x00010300L, 0x00000000L,
   0x00040c00L, 0x00000000L,
   0x00103000L, 0x00000000L,
   0x0040c000L, 0x00000000L,
   0x02060000L, 0x00000000L,
   0x08180000L, 0x00000000L,
   0x20600000L, 0x00000000L,
   0x03000000L, 0x00000001L,
   0x0c000000L, 0x00000004L,
   0x30000000L, 0x00000010L,
   0xc0000000L, 0x00000040L,
   0x00000000L, 0x00000206L,
   0x00000000L, 0x00000818L,
   0x00000000L, 0x00002060L,
   0x00000000L, 0x00010300L,
   0x00000000L, 0x00040c00L,
   0x00000000L, 0x00103000L,
   0x00000000L, 0x0040c000L,
};
long lp[] = {
   0x00000103L, 0x00000000L,  // OX
   0x0000040cL, 0x00000000L,  //  O
   0x00001030L, 0x00000000L,
   0x000040c0L, 0x00000000L,
   0x00020600L, 0x00000000L,
   0x00081800L, 0x00000000L,
   0x00206000L, 0x00000000L,
   0x01030000L, 0x00000000L,
   0x040c0000L, 0x00000000L,
   0x10300000L, 0x00000000L,
   0x40c00000L, 0x00000000L,
   0x06000000L, 0x00000002L,
   0x18000000L, 0x00000008L,
   0x60000000L, 0x00000020L,
   0x00000000L, 0x00000103L,
   0x00000000L, 0x0000040cL,
   0x00000000L, 0x00001030L,
   0x00000000L, 0x000040c0L,
   0x00000000L, 0x00020600L,
   0x00000000L, 0x00081800L,
   0x00000000L, 0x00206000L,

   0x00000302L, 0x00000000L, // O
   0x00000c08L, 0x00000000L, // XO
   0x00003020L, 0x00000000L,
   0x0000c080L, 0x00000000L,
   0x00060400L, 0x00000000L,
   0x00181000L, 0x00000000L,
   0x00604000L, 0x00000000L,
   0x03020000L, 0x00000000L,
   0x0c080000L, 0x00000000L,
   0x30200000L, 0x00000000L,
   0xc0800000L, 0x00000000L,
   0x04000000L, 0x00000006L,
   0x10000000L, 0x00000018L,
   0x40000000L, 0x00000060L,
   0x00000000L, 0x00000302L,
   0x00000000L, 0x00000c08L,
   0x00000000L, 0x00003020L,
   0x00000000L, 0x0000c080L,
   0x00000000L, 0x00060400L,
   0x00000000L, 0x00181000L,
   0x00000000L, 0x00604000L,

   0x00000602L, 0x00000000L,  //  O
   0x00001808L, 0x00000000L,  // OX
   0x00006020L, 0x00000000L,
   0x00030100L, 0x00000000L, 
   0x000c0400L, 0x00000000L,
   0x00301000L, 0x00000000L,
   0x00c04000L, 0x00000000L,
   0x06020000L, 0x00000000L,
   0x18080000L, 0x00000000L,
   0x60200000L, 0x00000000L,
   0x01000000L, 0x00000003L,
   0x04000000L, 0x0000000cL,
   0x10000000L, 0x00000030L,
   0x40000000L, 0x000000c0L,
   0x00000000L, 0x00000602L,
   0x00000000L, 0x00001808L,
   0x00000000L, 0x00006020L,
   0x00000000L, 0x00030100L,
   0x00000000L, 0x000c0400L,
   0x00000000L, 0x00301000L,
   0x00000000L, 0x00c04000L,

   0x00000406L, 0x00000000L,  // XO
   0x00001018L, 0x00000000L,  // O
   0x00004060L, 0x00000000L,
   0x00020300L, 0x00000000L,
   0x00080c00L, 0x00000000L,
   0x00203000L, 0x00000000L,
   0x0080c000L, 0x00000000L,
   0x04060000L, 0x00000000L,
   0x10180000L, 0x00000000L,
   0x40600000L, 0x00000000L,
   0x03000000L, 0x00000002L,
   0x0c000000L, 0x00000008L,
   0x30000000L, 0x00000020L,
   0xc0000000L, 0x00000080L,
   0x00000000L, 0x00000406L,
   0x00000000L, 0x00001018L,
   0x00000000L, 0x00004060L,
   0x00000000L, 0x00020300L,
   0x00000000L, 0x00080c00L,
   0x00000000L, 0x00203000L,
   0x00000000L, 0x0080c000L,
};
long mp[] = {
   0x00000007L, 0x00000000L, // XOX
   0x0000001cL, 0x00000000L,
   0x00000070L, 0x00000000L,
   0x00000e00L, 0x00000000L,
   0x00003800L, 0x00000000L,
   0x0000e000L, 0x00000000L,
   0x00070000L, 0x00000000L,
   0x001c0000L, 0x00000000L,
   0x00700000L, 0x00000000L,
   0x0e000000L, 0x00000000L,
   0x38000000L, 0x00000000L,
   0xe0000000L, 0x00000000L,
   0x00000000L, 0x00000007L,
   0x00000000L, 0x0000001cL,
   0x00000000L, 0x00000070L,
   0x00000000L, 0x00000e00L,
   0x00000000L, 0x00003800L,
   0x00000000L, 0x0000e000L,

   0x00010101L, 0x00000000L, // X
   0x00040404L, 0x00000000L, // O
   0x00101010L, 0x00000000L, // X
   0x00404040L, 0x00000000L,
   0x02020200L, 0x00000000L,
   0x08080800L, 0x00000000L,
   0x20202000L, 0x00000000L,
   0x80808000L, 0x00000000L,
   0x01010000L, 0x00000001L,
   0x04040000L, 0x00000004L,
   0x10100000L, 0x00000010L,
   0x40400000L, 0x00000040L,
   0x02000000L, 0x00000202L,
   0x08000000L, 0x00000808L,
   0x20000000L, 0x00002020L,
   0x80000000L, 0x00008080L,
   0x00000000L, 0x00010101L,
   0x00000000L, 0x00040404L,
   0x00000000L, 0x00101010L,
   0x00000000L, 0x00404040L,
};
long np[] = {
   0x0000000eL, 0x00000000L, // OXO
   0x00000038L, 0x00000000L,
   0x000000e0L, 0x00000000L,
   0x00000700L, 0x00000000L,
   0x00001c00L, 0x00000000L,
   0x00007000L, 0x00000000L,
   0x000e0000L, 0x00000000L,
   0x00380000L, 0x00000000L,
   0x00e00000L, 0x00000000L,
   0x07000000L, 0x00000000L,
   0x1c000000L, 0x00000000L,
   0x70000000L, 0x00000000L,
   0x00000000L, 0x0000000eL,
   0x00000000L, 0x00000038L,
   0x00000000L, 0x000000e0L,
   0x00000000L, 0x00000700L,
   0x00000000L, 0x00001c00L,
   0x00000000L, 0x00007000L,
   0x00000000L, 0x000e0000L,
   0x00000000L, 0x00380000L,
   0x00000000L, 0x00e00000L,

   0x00020202L, 0x00000000L, // O
   0x00080808L, 0x00000000L, // X
   0x00202020L, 0x00000000L, // O
   0x00808080L, 0x00000000L,
   0x01010100L, 0x00000000L,
   0x04040400L, 0x00000000L,
   0x10101000L, 0x00000000L,
   0x40404000L, 0x00000000L,
   0x02020000L, 0x00000002L,
   0x08080000L, 0x00000008L,
   0x20200000L, 0x00000020L,
   0x80800000L, 0x00000080L,
   0x01000000L, 0x00000101L,
   0x04000000L, 0x00000404L,
   0x10000000L, 0x00001010L,
   0x40000000L, 0x00004040L,
   0x00000000L, 0x00020202L,
   0x00000000L, 0x00080808L,
   0x00000000L, 0x00202020L,
   0x00000000L, 0x00808080L,

};
long op[] = {
   0x00000003L, 0x00000000L,
   0x00000006L, 0x00000000L,
   0x0000000cL, 0x00000000L,
   0x00000018L, 0x00000000L,
   0x00000030L, 0x00000000L,
   0x00000060L, 0x00000000L,
   0x000000c0L, 0x00000000L,
   0x00000300L, 0x00000000L,
   0x00000600L, 0x00000000L,
   0x00000c00L, 0x00000000L,
   0x00001800L, 0x00000000L,
   0x00003000L, 0x00000000L,
   0x00006000L, 0x00000000L,
   0x0000c000L, 0x00000000L,
   0x00030000L, 0x00000000L,
   0x00060000L, 0x00000000L,
   0x000c0000L, 0x00000000L,
   0x00180000L, 0x00000000L,
   0x00300000L, 0x00000000L,
   0x00600000L, 0x00000000L,
   0x00c00000L, 0x00000000L,
   0x03000000L, 0x00000000L,
   0x06000000L, 0x00000000L,
   0x0c000000L, 0x00000000L,
   0x18000000L, 0x00000000L,
   0x30000000L, 0x00000000L,
   0x60000000L, 0x00000000L,
   0xc0000000L, 0x00000000L,
   0x00000000L, 0x00000003L,
   0x00000000L, 0x00000006L,
   0x00000000L, 0x0000000cL,
   0x00000000L, 0x00000018L,
   0x00000000L, 0x00000030L,
   0x00000000L, 0x00000060L,
   0x00000000L, 0x000000c0L,
   0x00000000L, 0x00000300L,
   0x00000000L, 0x00000600L,
   0x00000000L, 0x00000c00L,
   0x00000000L, 0x00001800L,
   0x00000000L, 0x00003000L,
   0x00000000L, 0x00006000L,
   0x00000000L, 0x0000c000L,
   0x00000000L, 0x00030000L,
   0x00000000L, 0x00060000L,
   0x00000000L, 0x000c0000L,
   0x00000000L, 0x00180000L,
   0x00000000L, 0x00300000L,
   0x00000000L, 0x00600000L,
   0x00000000L, 0x00c00000L,

   0x00000101L, 0x00000000L,
   0x00000202L, 0x00000000L,
   0x00000404L, 0x00000000L,
   0x00000808L, 0x00000000L,
   0x00001010L, 0x00000000L,
   0x00002020L, 0x00000000L,
   0x00004040L, 0x00000000L,
   0x00008080L, 0x00000000L,
   0x00010100L, 0x00000000L,
   0x00020200L, 0x00000000L,
   0x00040400L, 0x00000000L,
   0x00080800L, 0x00000000L,
   0x00101000L, 0x00000000L,
   0x00202000L, 0x00000000L,
   0x00404000L, 0x00000000L,
   0x00808000L, 0x00000000L,
   0x01010000L, 0x00000000L,
   0x02020000L, 0x00000000L,
   0x04040000L, 0x00000000L,
   0x08080000L, 0x00000000L,
   0x10100000L, 0x00000000L,
   0x20200000L, 0x00000000L,
   0x40400000L, 0x00000000L,
   0x80800000L, 0x00000000L,
   0x01000000L, 0x00000001L,
   0x02000000L, 0x00000002L,
   0x04000000L, 0x00000004L,
   0x08000000L, 0x00000008L,
   0x10000000L, 0x00000010L,
   0x20000000L, 0x00000020L,
   0x40000000L, 0x00000040L,
   0x80000000L, 0x00000080L,
   0x00000000L, 0x00000101L,
   0x00000000L, 0x00000202L,
   0x00000000L, 0x00000404L,
   0x00000000L, 0x00000808L,
   0x00000000L, 0x00001010L,
   0x00000000L, 0x00002020L,
   0x00000000L, 0x00004040L,
   0x00000000L, 0x00008080L,
   0x00000000L, 0x00010100L,
   0x00000000L, 0x00020200L,
   0x00000000L, 0x00040400L,
   0x00000000L, 0x00080800L,
   0x00000000L, 0x00101000L,
   0x00000000L, 0x00202000L,
   0x00000000L, 0x00404000L,
   0x00000000L, 0x00808000L,
};
long pp[] = {
   0x00000002L, 0x00000000L,
   0x00000008L, 0x00000000L,
   0x00000020L, 0x00000000L,
   0x00000080L, 0x00000000L,
   0x00000100L, 0x00000000L,
   0x00000400L, 0x00000000L,
   0x00001000L, 0x00000000L,
   0x00004000L, 0x00000000L,
   0x00020000L, 0x00000000L,
   0x00080000L, 0x00000000L,
   0x00200000L, 0x00000000L,
   0x00800000L, 0x00000000L,
   0x01000000L, 0x00000000L,
   0x04000000L, 0x00000000L,
   0x10000000L, 0x00000000L,
   0x40000000L, 0x00000000L,
   0x00000000L, 0x00000002L,
   0x00000000L, 0x00000008L,
   0x00000000L, 0x00000020L,
   0x00000000L, 0x00000080L,
   0x00000000L, 0x00000100L,
   0x00000000L, 0x00000400L,
   0x00000000L, 0x00001000L,
   0x00000000L, 0x00004000L,
   0x00000000L, 0x00020000L,
   0x00000000L, 0x00080000L,
   0x00000000L, 0x00200000L,
   0x00000000L, 0x00800000L,
};
long qp[] = {
   0x00000001L, 0x00000000L,
   0x00000004L, 0x00000000L,
   0x00000010L, 0x00000000L,
   0x00000040L, 0x00000000L,
   0x00000200L, 0x00000000L,
   0x00000800L, 0x00000000L,
   0x00002000L, 0x00000000L,
   0x00008000L, 0x00000000L,
   0x00010000L, 0x00000000L,
   0x00040000L, 0x00000000L,
   0x00100000L, 0x00000000L,
   0x00400000L, 0x00000000L,
   0x02000000L, 0x00000000L,
   0x08000000L, 0x00000000L,
   0x20000000L, 0x00000000L,
   0x80000000L, 0x00000000L,
   0x00000000L, 0x00000001L,
   0x00000000L, 0x00000004L,
   0x00000000L, 0x00000010L,
   0x00000000L, 0x00000040L,
   0x00000000L, 0x00000200L,
   0x00000000L, 0x00000800L,
   0x00000000L, 0x00002000L,
   0x00000000L, 0x00008000L,
};

long* pieces[17];

long filled[2] = {
  0x00000000L, 0xFF000000L,
};
int pieceori[17];
int piecesize[17];

long solcount;

void print(const int piecenum) {
  long placed0[17];
  long placed1[17];
  for (int i=0;i<piecenum;i++) {
    placed0[i] = pieces[i][pieceori[i]];
    placed1[i] = pieces[i][pieceori[i]+1];
    cout << pieceori[i] << ",";
  } 
  cout << "\n";
  long filled0 = filled[0];
  long filled1 = filled[1];

  for (int i=0;i<4;i++) {
    for (int j=0;j<8;j++) {
      if (filled0 & 1) {
        for (int k=0;k<piecenum;k++) {
          if (placed0[k] & 1) {
            cout << (char)(k+'A');
          }
        }
      } else {
        cout << ".";
      }
      for (int k=0;k<piecenum;k++) {
        placed0[k] >>= 1;
      }
      filled0 >>= 1;
    }
    cout << "\n";
  }

  for (int i=0;i<3;i++) {
    for (int j=0;j<8;j++) {
      if (filled1 & 1) {
        for (int k=0;k<piecenum;k++) {
          if (placed1[k] & 1) {
            cout << (char)(k+'A');
          }
        }
      } else {
        cout << ".";
      }
      for (int k=0;k<piecenum;k++) {
        placed1[k] >>= 1;
      }
      filled1 >>= 1;
    }
    cout << "\n";
  }

}

void recurse(const int piecenum) {
  if (piecenum < 5) {
    cout << "progress: " << solcount << "\n";
    print(piecenum);
  }
  if (piecenum >= 17) {
    // found solution
    solcount++;
    if (solcount % 200000 == 0) {
      cout << "Solcount: " << solcount << "\n";
      print(piecenum);
    }
    return;
  } 
  int offset = 0;
  while (offset < piecesize[piecenum]) { 
    if ( !(    (filled[0] & pieces[piecenum][offset]) 
            || (filled[1] & pieces[piecenum][offset+1]) )) {
      filled[0] |= pieces[piecenum][offset];
      filled[1] |= pieces[piecenum][offset+1];
      pieceori[piecenum] = offset;
      recurse(piecenum+1);
      filled[0] &= ~(pieces[piecenum][offset]);
      filled[1] &= ~(pieces[piecenum][offset+1]);
    }
    offset += 2;
  }
}

int main() {
  solcount = 0;
  pieces[0] = ap; pieces[1] = bp; pieces[2] = cp;
  pieces[3] = dp; pieces[4] = ep; pieces[5] = fp;
  pieces[6] = gp; pieces[7] = hp; pieces[8] = ip;
  pieces[9] = jp; pieces[10] = kp; pieces[11] = lp;
  pieces[12] = mp; pieces[13] = np; pieces[14] = op;
  pieces[15] = pp; pieces[16] = qp;
  piecesize[0] = sizeof(ap)/4; piecesize[1] = sizeof(bp)/4;
  piecesize[2] = sizeof(cp)/4; piecesize[3] = sizeof(dp)/4;
  piecesize[4] = sizeof(ep)/4; piecesize[5] = sizeof(fp)/4;
  piecesize[6] = sizeof(gp)/4; piecesize[7] = sizeof(hp)/4;
  piecesize[8] = sizeof(ip)/4; piecesize[9] = sizeof(jp)/4;
  piecesize[10] = sizeof(kp)/4; piecesize[11] = sizeof(lp)/4;
  piecesize[12] = sizeof(mp)/4; piecesize[13] = sizeof(np)/4;
  piecesize[14] = sizeof(op)/4; piecesize[15] = sizeof(pp)/4;
  piecesize[16] = sizeof(qp)/4;
  recurse(0);
  cout << "Total solutions: " << solcount << "\n";
}
