#D0811. 日记分段

日记分段

题目描述

小 C 每天都会写一篇日记。日记由若干个句子组成,每个句子都以句号 .、问号 ? 或感叹号 ! 结尾。

现在小 C 想把整篇日记分成若干段。每个段落必须满足:

  • 段落的字符总数不能超过 nn
  • 一个句子必须完整地放在同一段里,不能被拆开;
  • 一个段落可以包含一个或多个连续的完整句子。

请你计算最少需要分成多少段。

如果某个句子本身的长度就超过 nn,那么无论如何都无法满足要求,请输出 Impossible

输入格式

第一行一个正整数 nn,表示每段最多能容纳的字符数。

第二行一个字符串 ss,表示日记内容。字符串中可能包含空格,因此需要按整行读入。

输出格式

如果可以完成分段,输出一行一个整数,表示最少段落数。

如果无法完成分段,输出 Impossible

样例

15
Hi!How are you?I'm fine.Thank you.
3
5
Hello!
Impossible
6
A.BC!D?
2

样例解释

样例 1 中,四个句子的长度分别为 3,12,9,103,12,9,10。可以分成 Hi!How are you?I'm fine.Thank you. 三段。

样例 2 中,唯一的句子 Hello! 长度为 66,超过了每段最大长度 55,所以无解。

样例 3 中,三个句子的长度分别为 2,3,22,3,2。前两个句子可以放入第一段,第三个句子放入第二段。

数据范围与约定

子任务 分值 限制
11 2020 保证日记中只有一个句子
22 3030 保证每个句子长度都不超过 nn,且答案不超过 33
33 5050 无特殊限制

对于 100%100\% 的数据,保证 1n1051 \le n \le 10^51s1051 \le |s| \le 10^5ss 仅包含大小写英文字母、数字、空格和常见英文标点,且最后一个字符一定是 .?!