Control paths for yumi0.c a > 1 main(0, s) a == 1 main(0, NULL) a == 0 s == NULL -> main(-1), main(-11) s != NULL -> main(-1), main(-20), main(-23, s), main(-13) putchar { a == -1 main(-2), putchar('u') a == -2 main(-3), putchar('o') a == -3 main(-4), putchar('y') a == -4 main(-5), putchar('n') a == -5 main(-6), putchar('e') a == -6 main(-7), putchar('g') a == -7 main(-8), putchar('i') a == -8 main(-9), putchar('k') a == -9 main(-10), putchar('o') a == -10 putchar('g') a == -11 main(-12), putchar('\n') a == -12 putchar('.') a == -13 main(-14), putchar('\n') a == -14 main(-15), putchar('.') a == -15 main(-16), putchar('a') a == -16 main(-17), putchar('m') a == -17 main(-18), putchar('a') a == -18 main(-19), putchar('s') a == -19 putchar('-') a == -20 main(-21), putchar(' ') a == -21 putchar(',') } a == -22 putchar(**s) a == -23 puts(s) Optimized tree for putchar states (not quite the actual tree being used) ? -1..-9, -11, -13..-18, -20 ? -1..-9 ? -1..-4 ? -1, -2 ? -1 : -2 : -3, -4 ? -3 : -4 : -5..-9 ? -5, -6 ? -5 : -6 : -7, -8, -9 ? -7 : -8, -9 ? -8 : -9 : -11, -13..-18, -20 ? -11, -13, -14, -15 ? -11, -13 ? -11 : -13 : -14, -15 ? -14 : -15 : -16, -17, -18, -20 ? -16, -17 ? -16 : -17 : -18, -20 ? -18 : -20 : -10, -12, -19, -21 ? -10, -12 ? -10 : -12 ? -19, -21 ? -19 : -21