B、 有趣的求和
题号:NC211093
时间限制:C/C++/Rust/Pascal 5秒,其他语言10秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

输入一组数据,包含M个整数(3 <= M <= 20),它们只能进行加法或者减法操作,你判断前M-1个数进行加或减操作后,结果是否可以等于第M个数,若没有方法可以得到第M个数,则只输出一行,为0。反之则输出共有两部分,第一部分在第一行输出,表示有多少种方式可以得到第M个数,第二部分从第二行开始为从左到右依次执行的操作(要求输出所有方式)。

输入描述:

第一行输入M
第二行输入M个整数,M个整数相互之间用空格隔开

输出描述:

1、没有方法可以得到第M个数,则只输出一行,为0
2、第一行输出有多少方式得到第M个数,其余各行分别输出操作方式
示例1

输入

复制
6
1 2 3 3 2 1

输出

复制
4
--++
-+-+
+-+-
++--

说明

有四种方法可以得到想要的结果(这四种分别为:--++,-+-+,+-+-,++--),第一种是--++,即表示1-2-3+3+2=1,其余同理。