#include<bits/stdc++.h>
using namespace std;
string s;
stack<string>stk;
struct node
{
string a,b;
};
stack<node>m;
string ch;
int point=0;
string ans;
bool compare(int x,string h)
{
if(x+h.size()>=s.size())return false;
if(s.substr(x,h.size() )==h)return true;
else return false;
}
void out(string x){ans+=x;}
void check(string x)
{
if(stk.empty()||stk.top()!=x)
{
cout<<"Match Error";
exit(0);
}
else stk.pop();
}
int main()
{
while(getline(cin,ch))
{
s+=ch;
s+='\n';
}
while(point<s.size())
{
if(compare(point,"[h1]"))
{
stk.push("[h1]");
point+=4;
out("# ");
}
else if(compare(point,"[/h1]"))
{
check("[h1]");
point+=5;
out(" #");
}
else if(compare(point,"[h2]"))
{
stk.push("[h2]");
point+=4;
out("## ");
continue;
}
else if(compare(point,"[/h2]"))
{
check("[h2]");
point+=5;
out(" ##");
continue;
}
else if(compare(point,"[i]"))
{
stk.push("[i]");
point+=3;
out("*");
continue;
}
else if(compare(point,"[/i]"))
{
check("[i]");
point+=4;
out("*");
continue;
}
else if(compare(point,"[b]"))
{
stk.push("[b]");
point+=3;
out("__");
continue;
}
else if(compare(point,"[/b]"))
{
check("[b]");
point+=4;
out("__");
continue;
}
else if(compare(point,"[url="))
{
int pos=s.find("]",point+5);
if(pos==string::npos)
{
cout<<"Match Error";
return 0;
}
out("[");
m.push({"url",s.substr(point+5,pos-point-5)});
point=pos+1;
continue;
}
else if(compare(point,"[/url]"))
{
if(m.empty()||m.top().a!="url")
{
cout<<"Match Error";
return 0;
}
point+=6;
out("](");
out(m.top().b);
out(")");
m.pop();
continue;
}
else if(compare(point,"[img="))
{
int pos=s.find("]",point+5);
if(pos==string::npos)
{
cout<<"Match Error";
return 0;
}
out("![");
m.push({"img",s.substr(point+5,pos-point-5)});
point=pos+1;
continue;
}
else if(compare(point,"[/img]"))
{
if(m.empty()||m.top().a!="img")
{
cout<<"Match Error";
return 0;
}
point+=6;
out("](");
out(m.top().b);
out(")");
m.pop();
continue;
}
else if(compare(point,"[quote]"))
{
string q="";
point+=7;
while(s[point]=='\n')point++;
while(point<s.size())
{
q+=s[point];
if(q.size()>7&&q.substr(q.size()-8)=="[/quote]")break;
point++;
}
if(point>=s.size())
{
cout<<"Match Error";
return 0;
}
for(int i=1;i<=8;i++)q.pop_back();
while(q.back()=='\n')q.pop_back();
if(ans.back()!='\n')out("\n");
out(">");
for(auto i:q)
{
string h;
h=i;
out(h);
if(i=='\n')out(">");
}
out("\n");
}
else if(compare(point,"[/quote]"))
{
cout<<"Match Error";
return 0;
}
else
{
string h;
h=s[point++];
out(h);
}
}
if((!stk.empty())||(!m.empty()))
{
cout<<"Unclosed Mark";
return 0;
}
cout<<ans;
return 0;
}