/*
_/_/_/_/    _/_/_/_/_/  _/_/_/
_/      _/      _/    _/      _/
_/      _/      _/    _/      _/
_/      _/      _/    _/      _/
_/      _/      _/    _/  _/  _/
_/      _/  _/  _/    _/    _/_/
_/_/_/_/      _/_/     _/_/_/_/_/

_/_/_/_/    _/    _/  _/      _/
_/      _/   _/  _/   _/_/  _/_/
_/      _/    _/_/    _/ _/_/ _/
_/      _/     _/     _/  _/  _/
_/      _/    _/_/    _/      _/
_/      _/   _/  _/   _/      _/
_/_/_/_/    _/    _/  _/      _/

_/_/_/_/_/ _/_/_/_/_/ _/_/_/_/_/
    _/         _/     _/
    _/         _/     _/
    _/         _/     _/_/_/_/
    _/         _/     _/
    _/         _/     _/
    _/     _/_/_/_/_/ _/_/_/_/_/

_/_/_/_/_/ _/_/_/_/_/ _/_/_/_/_/
    _/         _/     _/
    _/         _/     _/
    _/         _/     _/_/_/_/
    _/         _/     _/
    _/         _/     _/
    _/     _/_/_/_/_/ _/_/_/_/_/
*/
#include<bits/stdc++.h>
#define LL long long
#define pb push_back
#define mp make_pair
#define pii pair<int,int>
using namespace std;
namespace IO
{
    const int sz=1<<15;
    char inbuf[sz],outbuf[sz];
    char *pinbuf=inbuf+sz;
    char *poutbuf=outbuf;
    inline char _getchar()
    {
        if (pinbuf==inbuf+sz)fread(inbuf,1,sz,stdin),pinbuf=inbuf;
        return *(pinbuf++);
    }
    inline void _putchar(char x)
    {
        if (poutbuf==outbuf+sz)fwrite(outbuf,1,sz,stdout),poutbuf=outbuf;
        *(poutbuf++)=x;
    }
    inline void flush()
    {
        if (poutbuf!=outbuf)fwrite(outbuf,1,poutbuf-outbuf,stdout),poutbuf=outbuf;
    }
}
inline int read(){
	int v=0,f=1;
	char c=getchar();
	while (c<'0' || c>'9'){
		if (c=='-') f=-1;
		c=getchar();
	}
	while (c>='0' && c<='9'){
		v=v*10+c-'0';
		c=getchar();
	}
	return v*f;
}
const int Maxn=100005;
int n,a[Maxn];
int ans[Maxn];
char s[10];
int dp[233],pre[233];
int pl[Maxn],pr[Maxn],Ml[Maxn];
void Solve(int l,int r){
	if (l>=r) return;
	vector<pair<int,int> > R;
	vector<int> V;
	int tot=1;
	for (int i=l;i<=r;i++){
		if (a[i]!=1){
			int j=i,tmp=1;
			while(j<=r && a[j]!=1){
				if (1ll*tmp*a[j]>=1e9) tmp=1e9;
				else tmp=tmp*a[j];
				j++;
			}
			if (1ll*tot*tmp>=1e9) tot=1e9;
			else tot*=tmp;
			R.pb(mp(i,j-1));
			V.pb(tmp);
			i=j;
		}
	}
	if (tot==1e9){
		int lo=R[0].first,hi=R.back().second-1;
		for (int i=lo;i<=hi;i++) ans[i]=1;
		return;
	}
	memset(dp,0,sizeof(dp));
	dp[0]=0;
	pl[0]=l-1;pr[0]=l-1;
	Ml[0]=1;
	for (int i=1;i<=R.size();i++){
		Ml[i]=Ml[i-1]*V[i-1];
		pl[i]=R[i-1].first,pr[i]=R[i-1].second;
	}
	for (int i=1;i<=R.size();i++){
		for (int j=0;j<i;j++){
			if (dp[j]+Ml[i]/Ml[j]+pl[j+1]-pr[j]-1>dp[i]){
				dp[i]=dp[j]+Ml[i]/Ml[j]+pl[j+1]-pr[j]-1;
				pre[i]=j;
			}
		}
	}
	vector<pair<int,int> > Rg;
	int X=R.size();
	while (X){
		int pr=pre[X];
		Rg.pb(mp(pr+1,X));
		X=pr;
	}
	for (auto x:Rg){
		int lo=pl[x.first],hi=pr[x.second]-1;
		for (int i=lo;i<=hi;i++) ans[i]=1;
	}
}
int main(){
	n=read();
	for (int i=1;i<=n;i++) a[i]=read();
	int f=0;
	scanf("%s",s);
	int l=strlen(s);
	for (int i=0;i<l;i++){
		if (s[i]=='+') f|=1;
		else if (s[i]=='-') f|=2;
		else f|=4;
	}
	if (f==1 || f==3){
		for (int i=1;i<=n;i++){
			printf("%d",a[i]);
			if (i!=n) printf("+");
		}
		return 0;
	}
	if (f==2){
		for (int i=1;i<=n;i++){
			printf("%d",a[i]);
			if (i!=n) printf("-");
		}
		return 0;
	}
	if (f==4){
		for (int i=1;i<=n;i++){
			printf("%d",a[i]);
			if (i!=n) printf("*");
		}
		return 0;
	}
	if (f==6){
		int g=1;
		for (int i=1;i<=n;i++){
			printf("%d",a[i]);
			if (i!=n){
				if (g&&a[i+1]==0){
					printf("-");
					g=0;
				}
				else{
					printf("*");
				}
			}
		}
		return 0;
	}
	int lst=0;
	for (int i=1;i<=n;i++){
		if (a[i]==0){
			Solve(lst+1,i-1);
			lst=i;
		}
	}
	Solve(lst+1,n);
	for (int i=1;i<=n;i++){
		printf("%d",a[i]);
		if(i!=n){
			if (ans[i]==0){
				printf("+");
			}
			else{
				printf("*");
			}
		} 
	}
	return 0;
}
/*
4
3 1 1 2
+*
*/
	    	  		 	 		 	 		  	