2086: 源代码 Source Code
题目描述
crazygirl拯救了大部分的双城人,双城人民表示很感激,于是决定告知crazygirl有关Crazy Land的秘密。原来,Crazy Land是源代码计划中的一部分,它只存在于crazygirl的脑海中。如果crazygirl想要出去,必须完成一个特殊的任务――抄代码!!
你眼前出现了三个屏幕,第一个屏幕上有一个奇怪程序
这一个程序有很多行,是用Crazy Lang写成的
Crazy Lang的语法如下
1.一个普通语句占一行
2.一对大括号分别占一行,表示一层嵌套的程序
3.同一层程序中的普通语句顺序可以互换
4.对于每一层程序,在两个大括号之间有若干行,先写完所有普通语句,才可以写嵌套的程序,且每层程序最多只会嵌套一个程序
{ a { b } c } 普通语句未写完就写嵌套了 { a { b } { c } } 一层程序嵌套了多个程序
例如 而这些 则是不合法的
{
a = 0;
b = 1;
{
c = a + b;
}
}
抄写时,可以把一块屏幕的最下面一条语句抄到另一块屏幕的最下面,并且将这条语句从原来的地方擦掉。大括号可以任意擦除或写入。
现在需要从第一个屏幕将程序抄到第三个屏幕上。
crazygirl表示她认为梦做得够久了,于是希望尽早完成,请求出最小的抄写次数。
输入
输入有若干行字符,表示这个程序,保证给出的程序合法
输出
一行一个整数表示最小抄写次数模109+7
注意大括号的抄写不算入答案且抄写过程中也必须保证程序合法
样例输入 复制
{
a = 0;
b = 1;
{
c = a + b;
}
}
样例输出 复制
4
提示
【数据规模】
对于10%的数据行数小于20且嵌套层数不超过3
对于30%的数据行数小于1000且嵌套层数不超过20
对于100%的数据行数小于100000且嵌套层数不超过1000
数据保证
1.每行长度不超过20
2.每层程序至少有一句普通语句
3.除了最内层程序,每层程序均恰有一个嵌套程序
4.所有大括号严格对应,且文件以{开始,以}结束
5.大括号前后不会有空格
6.你不必管语句内容,同一层的普通语句一定可以互换。
Hints
样例解释
第零步,无视所有的大括号(反正可以抄完了再加)
第一步,把c = a + b;抄到第二块屏幕上
第二步,把b = 1;抄到第三块屏幕上
第三步,把a = 0;抄到第三块屏幕上
第四步,把c = a + b;抄到第三块屏幕上
最终步,补上大括号
由于大括号的擦除和写入不算入抄写次数,因此是4步