#include <iostream>
#include <string>
void answer(const std::string& x)
{
std::cout << x << '\n';
}
void no_answer()
{
std::cout << "Error occurred" << '\n';
}
bool parse(std::string_view& q, std::string& t)
{
if (!q.empty() && q[0] == ' ')
q.remove_prefix(1);
if (q.empty())
return false;
if (q[0] == 'i') {
q.remove_prefix(3);
t.append("int");
} else {
q.remove_prefix(4);
t.append("pair<");
if (!parse(q, t))
return false;
t.push_back(',');
if (!parse(q, t))
return false;
t.push_back('>');
}
return true;
}
void solve(size_t n, const std::string& s)
{
std::string t;
std::string_view q = s;
parse(q, t) && q.empty() ? answer(t) : no_answer();
}
int main()
{
std::cin.tie(nullptr)->sync_with_stdio(false);
size_t n;
std::cin >> n >> std::ws;
std::string s;
std::getline(std::cin, s);
solve(n, s);
return 0;
}
1706A - Another String Minimization Problem | 1695B - Circle Game |
1702B - Polycarp Writes a String from Memory | 1701A - Grass Field |
489C - Given Length and Sum of Digits | 886B - Vlad and Cafes |
915A - Garden | 356A - Knight Tournament |
1330A - Dreamoon and Ranking Collection | 1692B - All Distinct |
1156C - Match Points | 1675A - Food for Animals |
1328C - Ternary XOR | 1689A - Lex String |
1708B - Difference of GCDs | 863A - Quasi-palindrome |
1478A - Nezzar and Colorful Balls | 1581B - Diameter of Graph |
404A - Valera and X | 908A - New Year and Counting Cards |
146A - Lucky Ticket | 1594C - Make Them Equal |
1676A - Lucky | 1700B - Palindromic Numbers |
702C - Cellular Network | 1672C - Unequal Array |
1706C - Qpwoeirut And The City | 1697A - Parkway Walk |
1505B - DMCA | 478B - Random Teams |