 three-symbol sequence bbb is still at a two-bit 01 prefix level, and the encoding machine is waiting for a fourth symbol to choose between the 010 or 011 prefixes. As we have seen, on reaching the maximum codeword size, the termination symbol C = Xn is used by the encoder to close the message sequence, or to complete the code- word. A nice feature is that the encoding process does not need to halt at this point. Indeed, encoding can resume with the next incoming sequence, without any interruption. Integer, arithmetic, and adaptive coding Therefore, the encoding process may continue indefinitely over time. As another feature, the encoder may append two termination symbols cc = XnXn at the end of a codeword, to instruct the decoder that the probability distribution characteristics are being main- tained in the following message. Special terminations, or cc'c" XnXn+1-nnt2 whose symbols are not used by the original message source, may also be appended to the sequence for other signaling purposes, such as instructing a change in probability distribution or in the source alphabet. Having identical and exact knowledge of the message-source characteristics, the decoding machine (decoder) can compute all possible subintervals [UN, VN) to arbitrary small widths, as permitted by the arithmetic resolution, and store them in its memory. How this knowledge can be extracted from a program, and without communicating with the encoder, is a complex issue. As with the encoding process, the determination of the probability distribution is a matter of initial calibration, using the same program as the encoder later). The successive message bits input to the decoder are interpreted as codeword prefixes. The decoder performs the same task as reading Fig. 10.1 from right to left. Each codeword prefix points to a group of subintervals stored in the decoder's memory. As soon as a full codeword is identified (e.g., 01001 in the figure), the memory outputs the corresponding string (e.g., bbc). Therefore, decoding is also performed on the f