#include #include #ifndef M #define M 9 #endif #define N (1<<(2*M)) #define MASK ((1< k) { tmp=k; k=i; i=tmp; } if (j > k) { tmp=k; k=j; j=tmp; } if (j < i) { tmp=i; i=j; j=tmp; } return (j-i)<>M & MASK); k = sum-i-j; dist[n] = k>M & MASK); k = sum-i-j; if (dist[move(i,k,j)]==nmoves || dist[move(j,i,k)]==nmoves || dist[move(i,j,k)]==nmoves) { dist[witn=n] = nmoves+1; l++; } } } i = witn & MASK; j = i + (witn>>M & MASK); k = sum-i-j; printf("%d DIAM %d witness (%d,%d,%d)\n", l, nmoves, i,j,k); } }