CF70B Text Messaging

题目描述

小海象 Fangy 和所有的现代海象一样,喜欢通过短信进行交流。一天,他遇到了以下问题:当他发送很长的文本时,短信会被拆分成每条包含 $n$ 个字符的部分(即一条短信的大小)。这样一来,完整的句子和单词就会被拆分! Fangy 不喜欢这样,所以他决定自己手动将文本拆分成最少的短信,使得当短信被发送时,没有一个句子会被拆分成多条短信,并且短信总数最少。如果两个连续的句子位于不同的短信中,它们之间的空格可以省略(Fangy 不会写下这个空格)。 小海象的文本格式如下: ``` TEXT ::= SENTENCE | SENTENCE SPACE TEXT SENTENCE ::= WORD SPACE SENTENCE | WORD END END ::= {'.', '?', '!'} WORD ::= LETTER | LETTER WORD LETTER ::= {'a'..'z', 'A'..'Z'} SPACE ::= ' ' ``` SPACE 代表空格符号。 那么,Fangy 需要发送多少条短信?

输入格式

第一行包含一个整数 $n$,表示一条短信可容纳的字符数($2\leq n\leq255$)。 第二行包含 Fangy 要发送的文本,文本长度不超过 $10^4$ 个字符。题目保证输入的文本格式满足上述描述。特别地,这意味着文本不为空。

输出格式

输出一个整数,表示 Fangy 需要发送的短信数量。如果无法分割文本,则输出 “Impossible” (不带引号)。

说明/提示

我们来看看第三个样例。文本将被拆分为三条短信:“Hello!”,“Do you like fish?” 和 “Why?”。 由 ChatGPT 5 翻译