In the event of technical difficulties with Szkopuł, please contact us via email at [email protected].
If you would like to talk about tasks, solutions or technical problems, please visit our Discord servers. They are moderated by the community, but members of the support team are also active there.
The Byteotian Institute of Telecommunication (BIT) sets standards for data transmission in telecommunication networks all over Byteotia. Byteasar, one of the engineers employed at BIT, works on prefix codes - a certain way of representing characters. For each and every character of the Byteotian alphabet there is a corresponding sequence of bits, called the code word of that character. The code words of all characters have the following properties:
Let us consider the following exemplary prefix code for the alphabet consisting of the characters A, B, C, D and E:
character | code word |
A | 00 |
B | 10 |
C | 11 |
D | 010 |
E | 011 |
Encoding a sequence of characters with a prefix code consists in concatenating the code words of its successive characters. For example, the encoding of the sequence BACAEBABAE is 1000110001110001000011.
Byteasar noticed that if some leading bits are lost, the sequence may be decoded wrong, or it may even be not decoded at all. For example, if five initial bits of the sequence given above are removed, the resulting sequence 10001110001000011 will be decoded as BACBABAE. The last five letter (BABAE) are correct, but the first three (BAC) are not. Byteasar further noticed that all the letters after the first E are decoded correct. He concluded that whenever all the bits of the code word of E are intact, all the characters succeeding E will be decoded correct. The same holds for every encoded sequence obtained from one that contains E. He also noticed that the letter D shares this feature, but A, B and C do not.
Because of the properties of the code words of E and D Byteasar called them synchronising code words. He trusted you with the task of writing a programme that finds all the synchronising code words of a given prefix code. To save some time, he intends to present you all the code words on his binary monitor. This interesting device has four buttons:
In the first line of the standard input there is an integer () denoting the number of buttons pressed by Byteasar. In the following line an letters long string consisting of the characters '0', '1', 'B' and 'X' is given; the characters correspond to the buttons, of course. Each time the button X is pressed, a code word is completed and another one starts. The code words are numbered starting with 1. The sum of lengths of all code words will not exceed .
The number of synchronising code words should be printed out in the first line of the standard output. The following lines should contain the numbers of code words that are synchronising in increasing order, each in a separate line. If the given prefix code contains no synchronising code words, the first line should contain the number 0, and no more lines should follow.
For the input data:
21 11XB0XBB00XB11XB0XBBB
the correct result is:
2 4 5
The following code words appear successively on Byteasar's monitor: 11, 10, 00, 011, 010. Among them, 011 and 010 are synchronising.
Task author: Marek Biskup.