%{
#include <stdio.h>
int block_count = 0; // Counter for blocks
%}
 
%%
begin   { 
            block_count++; 
            printf("Block %d begins.\n", block_count); 
        }
end     { 
            printf("Block %d ends.\n", block_count); 
            block_count--; 
        }
.|\n    ; // Ignore all other characters
%%
 
int main() {
    printf("Enter your input (Ctrl+D to end):\n");
    yylex(); // Start lexical analysis
    if (block_count == 0) {
        printf("All blocks processed successfully.\n");
    } else {
        printf("Error: Unmatched 'begin' and 'end'.\n");
    }
    return 0;
}
 
 
				JXsKI2luY2x1ZGUgPHN0ZGlvLmg+CmludCBibG9ja19jb3VudCA9IDA7IC8vIENvdW50ZXIgZm9yIGJsb2NrcwolfQoKJSUKYmVnaW4gICB7IAogICAgICAgICAgICBibG9ja19jb3VudCsrOyAKICAgICAgICAgICAgcHJpbnRmKCJCbG9jayAlZCBiZWdpbnMuXG4iLCBibG9ja19jb3VudCk7IAogICAgICAgIH0KZW5kICAgICB7IAogICAgICAgICAgICBwcmludGYoIkJsb2NrICVkIGVuZHMuXG4iLCBibG9ja19jb3VudCk7IAogICAgICAgICAgICBibG9ja19jb3VudC0tOyAKICAgICAgICB9Ci58XG4gICAgOyAvLyBJZ25vcmUgYWxsIG90aGVyIGNoYXJhY3RlcnMKJSUKCmludCBtYWluKCkgewogICAgcHJpbnRmKCJFbnRlciB5b3VyIGlucHV0IChDdHJsK0QgdG8gZW5kKTpcbiIpOwogICAgeXlsZXgoKTsgLy8gU3RhcnQgbGV4aWNhbCBhbmFseXNpcwogICAgaWYgKGJsb2NrX2NvdW50ID09IDApIHsKICAgICAgICBwcmludGYoIkFsbCBibG9ja3MgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseS5cbiIpOwogICAgfSBlbHNlIHsKICAgICAgICBwcmludGYoIkVycm9yOiBVbm1hdGNoZWQgJ2JlZ2luJyBhbmQgJ2VuZCcuXG4iKTsKICAgIH0KICAgIHJldHVybiAwOwp9Cgo=