1050: 超级玛丽奥

Memory Limit:128 MB Time Limit:1.000 S
Judge Style:Text Compare Creator:
Submit:38 Solved:5

Description

众所周知,超级玛丽是一款非常经典的冒险游戏。玩家操控主人公Mario通过不停的跳跃和移动,通过一关又一关的阻碍,到达终点,将公主从库巴的魔爪中救出。每一关中,会有一些神奇的“问号砖块”,在这些砖块中藏着若干金币(也有可能没有金币,而是力量星星)。




SYH想要挑战超级玛丽第一百二十五关的世界纪录。当然,世界纪录的达成,仅凭时间最短是不够的,为了增加难度,世界纪录还要求Mario必须在本关吃到至少S个金币

这样的方案可能会有很多,所以SYH还附加了两个要求以使得整体方案最优化:

1.如果两个方案顶的砖块数相同,那么优先选择总金币少的方案;

2.如果总金币数仍然相同,那么优先选择起始砖块靠前的方案。

已知地图上有N个砖块,每个砖块内藏有ai个金币,现在SYH想要你告诉他,最少需要顶多少个砖块才能至少吃到S个金币,同时要你将最优方案输出出来。

Input

输入文件名为 mario.in

输入共2行:第一行为2个正整数N、S,分别代表砖块的个数N和要求金币个数S。

       接下来一行有N个自然数ai

Output

输出文件名为 mario.out

输出共有2行,第一行输出mario最少需要顶的砖块数量q

第二行输出q个数字,以空格分隔,表示顶的砖块内的金币个数(从左到右输出)

如果无论怎么样都无法吃到S个金币,仅仅输出一行0

Sample Input Copy

6 7
2 3 1 2 4 3

Sample Output Copy

2
4 3

HINT

【输入输出样例2】

mario.in

mario.out

6 7

2 3 1 6 4 3


2

1 6




【输入输出样例3】

mario.in

mario.out

3 7

1 2 2


0




【样例解释】

       对于第一个样例,SYH应当选择顶最后的2个砖块,吃到7个金币,显然这是顶的砖块数最少的方案。

       对于第二个样例,我们可以发现有2种顶砖块数最少的方案:顶掉第3、4个砖块或者顶掉第5、6个砖块,同时这两者的方案获得的金币数相同,则优先选择靠前的方案。

       对于第三个样例,即使顶掉所有的砖块,也无法凑齐至少7个金币,所以输出0。



【数据范围】

       对于100%的数据2N 105,0ai,SMAX_INT