for (i = 1; i < (1 << n); ++i) { fromPole = i & i-1; if (!(n&1)) fromPole = fromPole >> 1; fromPole = fromPole % 3; toPole = (i | i-1) + 1; if (!(n&1)) toPole = toPole >> 1; toPole = toPole % 3; printf("Move disc from peg %c to %c\n", (65+fromPole), (65+toPole)); }