#include <iostream> using namespace std; int n; char sym[20]; int final; void solve() { double sum=1; int index=1; while(sym[index] == '.' && index < n) { if(index>=9) sum=sum*100+index+1; else sum=sum*10+index+1; index++; }//如果index为。那么跳过直到不是。其值被放在sum中 for(int i=index;i<n;i++) { if(sym[i+1]!='.')//如果当前的符号的下一个符号是点,那么直到把下一个数算出来为止 if(sym[i]=='+') sum+=i+1; else sum-=i+1; else { char t=sym[i]; double tmp=i+1; i++; while(sym[i]=='.') { if(i>=9) tmp=tmp*100+i+1; else tmp=tmp*10+i+1; i++; } if(t == '+') sum += tmp; else sum -= tmp; i--;//加过头了要剪掉 } } if(sum == 0) { final++; if(final > 20) return; printf("1"); for(int i=2;i<=n ; i++) { printf(" %c %d",sym[i-1],i); } cout<<endl; } } void dfs(int m) { if(m==n) {solve(); return;} sym[m]='+'; dfs(m+1); sym[m]='-'; dfs(m+1); sym[m]='.'; dfs(m+1); } int main() { while(cin>>n) { final=0; dfs(1); cout<<final<<endl; } }