#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
/*
6
1 + 3 + 2 + -4 * -5 + 1
9
1 + 3 + 2 + -4 * -5 + 1 + 2 - 1 - -1
9
1 + 3 + 2 + -4 * -5 / 1 + 2 - 1 - -1
9
1 + 3 + 2 + -4 * -5 / 2 / 1 - 1 - -1
4
2 + 1 - 2 - 1
4
2 + 1 * 2 - 1
1
2
2
2 + 1
*/
int main()
{
int n;
cin >> n;
vector<int> nums(n);
string s = "+"; //前面一个+
for(int i=0; i<n; i++)
{
cin >> nums[i]; //读入数字
if(i<n-1)
{
char c;
cin >> c; //读入符号
s += c;
}
}
//最后添加一个和最后一个字符不一样的符号,这样最后一个数字串才能排序,因为排序是遇到不一样的符号才排序
if(s[n-1] == '-')
s += '+'; //后面一个-
else
s += '-';
//cout << s << endl;
//只有一个数字的情况
if(n == 1)
{
cout << nums[0];
return 0;
}
//nums[i]的前面一个符号是s[i] 0 - n-1
//nums[i]的后面一个符号是s[i+1] 1 - n
//now代表当前待排序数字序列的符号,当当前数字nums[i]后面的符号与now不一样时,
//执行(1)设置right,(2)排序[left, right],(3)更新 left、now。
//前一个符号
char now = '+';
int left = 0;
int right = 0;
bool sort_flag = 0;
for(int i=0; i<=n-1; i++)
{
// '+' 序列排序条件
if(now == '+' && s[i+1] == '-')
{
right = i;
sort_flag = 1;
}
else if(now == '+' && (s[i+1] == '*' || s[i+1] == '/'))
{
right = i-1;
sort_flag = 1;
}
// '-' 序列排序条件
else if(now == '-' && s[i+1] == '+')
{
right = i;
sort_flag = 1;
}
else if(now == '-' && (s[i+1] == '*' || s[i+1] == '/'))
{
right = i-1;
sort_flag = 1;
}
// '*' 序列排序条件
else if(now == '*' && (s[i+1] == '/' || s[i+1] == '+' || s[i+1] == '-'))
{
right = i;
sort_flag = 1;
}
// '/' 序列排序条件
else if(now == '/' && (s[i+1] == '*' || s[i+1] == '+' || s[i+1] == '-'))
{
right = i;
sort_flag = 1;
}
//是否排序
if(sort_flag)
{
sort(nums.begin()+left, nums.begin()+right+1);
left = right+1;
now = s[i+1];
sort_flag = 0;
}
}
//输出
for(int i=0; i<n; i++)
{
cout << nums[i];
if(i < n-1)
{
cout << ' ';
cout << s[i+1];
cout << ' ';
}
}
return 0;
}
/*
int main()
{
int n;
cin >> n;
vector<int> nums(n);
string s = "+"; //前面一个+
for(int i=0; i<n; i++)
{
cin >> nums[i]; //读入数字
if(i<n-1)
{
char c;
cin >> c; //读入符号
s += c;
}
}
//最后添加一个和最后一个字符不一样的符号,这样最后一个数字串才能排序,因为排序是遇到不一样的符号才排序
if(s[n-1] == '-')
s += '+'; //后面一个-
else
s += '-';
//cout << s << endl;
//只有一个数字的情况
if(n == 1)
{
cout << nums[0];
return 0;
}
//nums[i]的前面一个符号是s[i] 0 - n-1
//nums[i]的后面一个符号是s[i+1] 0 - n
//now代表当前待排序数字序列的符号,当当前数字nums[i]后面的符号与now不一样时,
//执行(1)设置right,(2)排序[left, right],(3)更新 left、now。
//前一个符号
char now = '+';
int left = 0;
int right = 0;
for(int i=0; i<=n-1; i++)
{
// '+' 序列待排序
if(now == '+' && s[i+1] == '-')
{
right = i;
sort(nums.begin()+left, nums.begin()+right+1);
left = right + 1;
now = s[i+1];
}
else if(now == '+' && (s[i+1] == '*' || s[i+1] == '/'))
{
right = i-1;
sort(nums.begin()+left, nums.begin()+right+1);
left = right+1;
now = s[i+1];
}
// '-' 序列待排序
else if(now == '-' && s[i+1] == '+')
{
right = i;
sort(nums.begin()+left, nums.begin()+right+1);
left = right + 1;
right = left;
now = s[i+1];
}
else if(now == '-' && (s[i+1] == '*' || s[i+1] == '/'))
{
right = i-1;
sort(nums.begin()+left, nums.begin()+right+1);
left = right+1;
now = s[i+1];
}
// '*' 序列待排序
else if(now == '*' && (s[i+1] == '/' || s[i+1] == '+' || s[i+1] == '-'))
{
right = i;
sort(nums.begin()+left, nums.begin()+right+1);
left = right+1;
now = s[i+1];
}
// '/' 序列待排序
else if(now == '/' && (s[i+1] == '*' || s[i+1] == '+' || s[i+1] == '-'))
{
right = i;
sort(nums.begin()+left, nums.begin()+right+1);
left = right+1;
now = s[i+1];
}
}
//输出
for(int i=0; i<n; i++)
{
cout << nums[i];
if(i < n-1)
{
cout << ' ';
cout << s[i+1];
cout << ' ';
}
}
return 0;
}
*/
/*
int main()
{
int n;
cin >> n;
vector<int> nums(n);
string s = "+"; //前面一个+
for(int i=0; i<n; i++)
{
cin >> nums[i]; //读入数字
if(i<n-1)
{
char c;
cin >> c; //读入符号
s += c;
}
}
//最后添加一个和最后一个字符不一样的符号,这样最后一个数字串才能排序,因为排序是遇到不一样的符号才排序
if(s[n-1] == '-')
s += '+'; //后面一个+
else
s += '-';
//cout << s << endl;
//只有一个数字的情况
if(n == 1)
{
cout << nums[0];
return 0;
}
//nums[i]的前面一个符号是s[i] 0 - n-1
//nums[i]的后面一个符号是s[i+1] 0 - n
//前一个符号
char now = '+';
int left = 0;
int right = 0;
for(int i=0; i<=n-1; i++)
{
// '+' 序列
if(now == '+' && s[i+1] == '+')
{
right = i;
}
else if(now == '+' && s[i+1] == '-')
{
right = i;
sort(nums.begin()+left, nums.begin()+right+1);
left = right + 1;
right = left;
now = '-';
}
else if(now == '+' && s[i+1] == '*')
{
right = i-1;
sort(nums.begin()+left, nums.begin()+right+1);
left = right+1;
now = '*';
}
else if(now == '+' && s[i+1] == '/')
{
right = i-1;
sort(nums.begin()+left, nums.begin()+right+1);
left = right+1;
now = '/';
}
// '-' 序列
else if(now == '-' && s[i+1] == '-')
{
right = i;
}
else if(now == '-' && s[i+1] == '+')
{
right = i;
sort(nums.begin()+left, nums.begin()+right+1);
left = right + 1;
right = left;
now = '+';
}
else if(now == '-' && s[i+1] == '*')
{
right = i-1;
sort(nums.begin()+left, nums.begin()+right+1);
left = right+1;
now = '*';
}
else if(now == '-' && s[i+1] == '/')
{
right = i-1;
sort(nums.begin()+left, nums.begin()+right+1);
left = right+1;
now = '/';
}
// '*' 序列
else if(now == '*' && s[i+1] == '*')
{
right = i;
}
else if(now == '*' && s[i+1] == '/')
{
right = i;
sort(nums.begin()+left, nums.begin()+right+1);
left = right+1;
now = '/';
}
else if(now == '*' && s[i+1] == '+')
{
right = i;
sort(nums.begin()+left, nums.begin()+right+1);
left = right+1;
now = '+';
}
else if(now == '*' && s[i+1] == '-')
{
right = i;
sort(nums.begin()+left, nums.begin()+right+1);
left = right+1;
now = '-';
}
// '/' 序列
else if(now == '/' && s[i+1] == '/')
{
right = i;
}
else if(now == '/' && s[i+1] == '*')
{
right = i;
sort(nums.begin()+left, nums.begin()+right+1);
left = right+1;
now = '*';
}
else if(now == '/' && s[i+1] == '+')
{
right = i;
sort(nums.begin()+left, nums.begin()+right+1);
left = right+1;
now = '+';
}
else if(now == '/' && s[i+1] == '-')
{
right = i;
sort(nums.begin()+left, nums.begin()+right+1);
left = right+1;
now = '-';
}
}
//输出
for(int i=0; i<n; i++)
{
cout << nums[i];
if(i < n-1)
{
cout << ' ';
cout << s[i+1];
cout << ' ';
}
}
return 0;
}
*/