#include<bits/stdc++.h>
typedef long long LL;
#define pb push_back
const LL maxn=1e5+9;
LL Read(){
	LL x(0),f(1); char c=getchar();
	while(c<'0' || c>'9'){
		if(c=='-') f=-1; c=getchar();
	}
	while(c>='0' && c<='9'){
		x=(x<<3ll)+(x<<1ll)+c-'0'; c=getchar();
	}return x*f;
}
void Chkmax(LL &x,LL y){
	if(y>x) x=y;
}
LL n;
LL a[maxn];
char s[maxn];
namespace sub1{
	void Solve(){
		for(LL i=1;i<n;++i){
			printf("%lld",a[i]); printf("%c",s[1]);
		}
		printf("%lld\n",a[n]);
		return;
	}
}
namespace sub2{
	void Solve(){
		LL flag(0),nw(0);
		for(LL i=1;i<=n;++i){
			if(!a[i]){
				nw=i; flag=1;
				break;
			}
		}
		if(!flag){
			for(LL i=1;i<n;++i){
				printf("%lld*",a[i]);
			}
			printf("%lld\n",a[n]);
			return;
		}
		if(nw==1){
			for(LL i=1;i<n;++i){
				printf("%lld*",a[i]);
			}
			printf("%lld\n",a[n]);
			return;
		}
		for(LL i=1;i<nw-1;++i){
			printf("%lld*",a[i]);
		}
		printf("%lld-",a[nw-1]);
		for(LL i=nw;i<n;++i){
			printf("%lld*",a[i]);
		}
		printf("%lld\n",a[n]);
		return;
	}
}
namespace sub3{
	LL pre[maxn],f[maxn];
	std::vector<char> Ans;
	void Dfs(LL x,LL l){
		if(pre[x]!=l-1){
			Dfs(pre[x],l);
			Ans.pb('+');
			for(LL i=pre[x]+1;i<x;++i){
				Ans.pb(a[i]+'0');
				Ans.pb('*');
			}
			Ans.pb(a[x]+'0');
		}else{
			for(LL i=pre[x]+1;i<x;++i){
				Ans.pb(a[i]+'0');
				Ans.pb('*');
			}
			Ans.pb(a[x]+'0');
		}
	}
	void Dp(LL l,LL r){
		{
			LL ret(1);
			for(LL i=l;i<=r;++i){
				ret=ret*a[i];
				f[i]=ret; pre[i]=l-1;
			}
		}
		//for(LL i=l;i<=r;++i)
		for(LL i=l;i<r;++i){
			if(a[i+1]==1){
				Chkmax(f[i+1],f[i]+1);
				if(f[i]+1==f[i+1]){
					pre[i+1]=i;
				}
			}else{
				//printf("(%lld:%lld)\n",i,f[i]);
				LL ret(1);
				for(LL j=i+1;j<=r;++j){
					ret=ret*a[j];
					Chkmax(f[j],f[i]+ret);
					if(f[j]==f[i]+ret){
						pre[j]=i;
					}
				}
			}
		}
		//for(LL i=l;i<=r;++i) printf("%lld ",pre[i]); puts("");
		//printf("%lld\n",f[r]);
		Dfs(r,l);
	}
	void Get(LL l,LL r){
		LL ret(1);
		LL lt(r+1),rt(r);
		while(a[lt-1]==1) --lt;
		r=lt-1;
		LL flag(0);
		for(LL i=l;i<=r;++i){
			ret*=a[i];
			if(ret>=10000000000000000){
				flag=1; break;
			}
		}
		//printf("(%d)(%lld,%lld)%lld\n",Ans.size(),lt,rt,flag);
		if(flag){
			for(LL i=l;i<r;++i){
				Ans.pb(a[i]+'0'); Ans.pb('*');
			}
			Ans.pb(a[r]+'0');
		}else{
			Dp(l,r);
		}
		for(LL i=lt;i<=rt;++i){
			Ans.pb('+');
			Ans.pb(a[i]+'0');
		}
	}
	void Solve(){
		//puts("033");
		for(LL l=1,r;l<=n;l=r+1){
			r=l;
			if(l!=1) Ans.pb('+');
			if(!a[l] || a[l]==1){
				Ans.pb(a[l]+'0');
				continue;
			}
			//printf("(%lld,%lld)\n",l,r);
			while(r<n && a[r+1]) ++r;
			//printf("(%lld,%lld)\n",l,r);
			Get(l,r);
		}
		for(LL i=0;i<Ans.size();++i){
			printf("%c",Ans[i]);
		}
		puts("");
	}
}
int main(){
	n=Read();
	for(LL i=1;i<=n;++i) a[i]=Read();
	scanf(" %s",s+1);
	LL len=strlen(s+1);
	if(len==1) sub1::Solve();
	else if(len==2){
		LL flag(0);
		for(LL i=1;i<=len;++i) flag|=(s[i]=='*');
		if(!flag){
			s[1]='+';
			sub1::Solve();
			return 0;
		}
		flag=0;
        for(LL i=1;i<=len;++i) flag|=(s[i]=='+');
		if(!flag) sub2::Solve();
		else sub3::Solve();
	}else{
		LL flag(0);
		for(LL i=1;i<=len;++i) flag|=(s[i]=='+');
		if(!flag) sub2::Solve();
		else sub3::Solve();
	}
	return 0;
}