#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
void * wmem;
char memarr[ 96000000 ] ;
template < class T> inline void walloc1d( T ** arr, int x, void ** mem = & wmem) {
static int skip[ 16 ] = { 0 , 15 , 14 , 13 , 12 , 11 , 10 , 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 } ;
( * mem) = ( void * ) ( ( ( char * ) ( * mem) ) + skip[ ( ( unsigned long long ) ( * mem) ) & 15 ] ) ;
( * arr) = ( T* ) ( * mem) ;
( * mem) = ( ( * arr) + x) ;
}
template < class T> inline void walloc1d( T ** arr, int x1, int x2, void ** mem = & wmem) {
walloc1d( arr, x2- x1, mem) ;
( * arr) - = x1;
}
string strReplace_L( string str, string bef, string aft, void * mem = wmem) {
int i = 0 ;
int k;
int * fail;
char * m;
string res;
walloc1d( & fail, bef.size ( ) + 1 , & mem) ;
walloc1d( & m, str.size ( ) , & mem) ;
for ( i= ( 0 ) ; i< ( str.size ( ) ) ; i++ ) {
m[ i] = 0 ;
}
k = fail[ 0 ] = - 1 ;
for ( i= ( 0 ) ; i< ( bef.size ( ) ) ; i++ ) {
while ( k>= 0 && bef[ k] ! = bef[ i] ) {
k = fail[ k] ;
}
fail[ i+ 1 ] = ++ k;
}
k = 0 ;
for ( i= ( 0 ) ; i< ( str.size ( ) ) ; i++ ) {
while ( k >= 0 && bef[ k] ! = str[ i] ) {
k = fail[ k] ;
}
k++ ;
if ( k == bef.size ( ) ) {
m[ i- bef.size ( ) + 1 ] = 1 ;
k = fail[ k] ;
}
}
i = 0 ;
while ( i < str.size ( ) ) {
if ( m[ i] ) {
res + = aft;
i + = bef.size ( ) ;
}
else {
res + = str[ i++ ] ;
}
}
return res;
}
string strReplace_L( string str, vector< string> bef, vector< string> aft, void * mem = wmem) {
int i = 0 ;
int k;
int q;
int * fail;
int * m;
string res;
walloc1d( & fail, bef.size ( ) + 1 , & mem) ;
walloc1d( & m, str.size ( ) , & mem) ;
for ( i= ( 0 ) ; i< ( str.size ( ) ) ; i++ ) {
m[ i] = - 1 ;
}
for ( q= ( bef.size ( ) ) - 1 ; q>= ( 0 ) ; q-- ) {
k = fail[ 0 ] = - 1 ;
for ( i= ( 0 ) ; i< ( bef[ q] .size ( ) ) ; i++ ) {
while ( k>= 0 && bef[ q] [ k] ! = bef[ q] [ i] ) {
k = fail[ k] ;
}
fail[ i+ 1 ] = ++ k;
}
k = 0 ;
for ( i= ( 0 ) ; i< ( str.size ( ) ) ; i++ ) {
while ( k >= 0 && bef[ q] [ k] ! = str[ i] ) {
k = fail[ k] ;
}
k++ ;
if ( k == bef[ q] .size ( ) ) {
m[ i- bef[ q] .size ( ) + 1 ] = q;
k = fail[ k] ;
}
}
}
i = 0 ;
while ( i < str.size ( ) ) {
if ( m[ i] >= 0 ) {
res + = aft[ m[ i] ] ;
i + = bef[ m[ i] ] .size ( ) ;
}
else {
res + = str[ i++ ] ;
}
}
return res;
}
#define main dummy_main
int main( ) {
wmem = memarr;
return 0 ;
}
#undef main
class Solution{
public :
string interpret( string str) {
dummy_main( ) ;
str = strReplace_L( str, "()" , "o" ) ;
str = strReplace_L( str, "(al)" , "al" ) ;
return str;
}
}
;
// cLay version 20201206-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class Solution {
// public:
// string interpret(string str) {
// dummy_main();
// str = strReplace(str, "()", "o");
// str = strReplace(str, "(al)", "al");
// return str;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnZvaWQqd21lbTsKY2hhciBtZW1hcnJbOTYwMDAwMDBdOwp0ZW1wbGF0ZTxjbGFzcyBUPiBpbmxpbmUgdm9pZCB3YWxsb2MxZChUICoqYXJyLCBpbnQgeCwgdm9pZCAqKm1lbSA9ICZ3bWVtKXsKICBzdGF0aWMgaW50IHNraXBbMTZdID0gezAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDF9OwogICgqbWVtKSA9ICh2b2lkKikoICgoY2hhciopKCptZW0pKSArIHNraXBbKCh1bnNpZ25lZCBsb25nIGxvbmcpKCptZW0pKSAmIDE1XSApOwogICgqYXJyKT0oVCopKCptZW0pOwogICgqbWVtKT0oKCphcnIpK3gpOwp9CnRlbXBsYXRlPGNsYXNzIFQ+IGlubGluZSB2b2lkIHdhbGxvYzFkKFQgKiphcnIsIGludCB4MSwgaW50IHgyLCB2b2lkICoqbWVtID0gJndtZW0pewogIHdhbGxvYzFkKGFyciwgeDIteDEsIG1lbSk7CiAgKCphcnIpIC09IHgxOwp9CnN0cmluZyBzdHJSZXBsYWNlX0woc3RyaW5nIHN0ciwgc3RyaW5nIGJlZiwgc3RyaW5nIGFmdCwgdm9pZCAqbWVtID0gd21lbSl7CiAgaW50IGkgPSAwOwogIGludCBrOwogIGludCpmYWlsOwogIGNoYXIqbTsKICBzdHJpbmcgcmVzOwogIHdhbGxvYzFkKCZmYWlsLCBiZWYuc2l6ZSgpKzEsICZtZW0pOwogIHdhbGxvYzFkKCZtLCBzdHIuc2l6ZSgpLCAmbWVtKTsKICBmb3IoaT0oMCk7aTwoc3RyLnNpemUoKSk7aSsrKXsKICAgIG1baV0gPSAwOwogIH0KICBrID0gZmFpbFswXSA9IC0xOwogIGZvcihpPSgwKTtpPChiZWYuc2l6ZSgpKTtpKyspewogICAgd2hpbGUoaz49MCAmJiBiZWZba10gIT0gYmVmW2ldKXsKICAgICAgayA9IGZhaWxba107CiAgICB9CiAgICBmYWlsW2krMV0gPSArK2s7CiAgfQogIGsgPSAwOwogIGZvcihpPSgwKTtpPChzdHIuc2l6ZSgpKTtpKyspewogICAgd2hpbGUoayA+PSAwICYmIGJlZltrXSAhPSBzdHJbaV0pewogICAgICBrID0gZmFpbFtrXTsKICAgIH0KICAgIGsrKzsKICAgIGlmKGsgPT0gYmVmLnNpemUoKSl7CiAgICAgIG1baS1iZWYuc2l6ZSgpKzFdID0gMTsKICAgICAgayA9IGZhaWxba107CiAgICB9CiAgfQogIGkgPSAwOwogIHdoaWxlKGkgPCBzdHIuc2l6ZSgpKXsKICAgIGlmKG1baV0pewogICAgICByZXMgKz0gYWZ0OwogICAgICBpICs9IGJlZi5zaXplKCk7CiAgICB9CiAgICBlbHNlewogICAgICByZXMgKz0gc3RyW2krK107CiAgICB9CiAgfQogIHJldHVybiByZXM7Cn0Kc3RyaW5nIHN0clJlcGxhY2VfTChzdHJpbmcgc3RyLCB2ZWN0b3I8c3RyaW5nPiBiZWYsIHZlY3RvcjxzdHJpbmc+IGFmdCwgdm9pZCAqbWVtID0gd21lbSl7CiAgaW50IGkgPSAwOwogIGludCBrOwogIGludCBxOwogIGludCpmYWlsOwogIGludCptOwogIHN0cmluZyByZXM7CiAgd2FsbG9jMWQoJmZhaWwsIGJlZi5zaXplKCkrMSwgJm1lbSk7CiAgd2FsbG9jMWQoJm0sIHN0ci5zaXplKCksICZtZW0pOwogIGZvcihpPSgwKTtpPChzdHIuc2l6ZSgpKTtpKyspewogICAgbVtpXSA9IC0xOwogIH0KICBmb3IocT0oYmVmLnNpemUoKSktMTtxPj0oMCk7cS0tKXsKICAgIGsgPSBmYWlsWzBdID0gLTE7CiAgICBmb3IoaT0oMCk7aTwoYmVmW3FdLnNpemUoKSk7aSsrKXsKICAgICAgd2hpbGUoaz49MCAmJiBiZWZbcV1ba10gIT0gYmVmW3FdW2ldKXsKICAgICAgICBrID0gZmFpbFtrXTsKICAgICAgfQogICAgICBmYWlsW2krMV0gPSArK2s7CiAgICB9CiAgICBrID0gMDsKICAgIGZvcihpPSgwKTtpPChzdHIuc2l6ZSgpKTtpKyspewogICAgICB3aGlsZShrID49IDAgJiYgYmVmW3FdW2tdICE9IHN0cltpXSl7CiAgICAgICAgayA9IGZhaWxba107CiAgICAgIH0KICAgICAgaysrOwogICAgICBpZihrID09IGJlZltxXS5zaXplKCkpewogICAgICAgIG1baS1iZWZbcV0uc2l6ZSgpKzFdID0gcTsKICAgICAgICBrID0gZmFpbFtrXTsKICAgICAgfQogICAgfQogIH0KICBpID0gMDsKICB3aGlsZShpIDwgc3RyLnNpemUoKSl7CiAgICBpZihtW2ldID49IDApewogICAgICByZXMgKz0gYWZ0W21baV1dOwogICAgICBpICs9IGJlZlttW2ldXS5zaXplKCk7CiAgICB9CiAgICBlbHNlewogICAgICByZXMgKz0gc3RyW2krK107CiAgICB9CiAgfQogIHJldHVybiByZXM7Cn0KI2RlZmluZSBtYWluIGR1bW15X21haW4KaW50IG1haW4oKXsKICB3bWVtID0gbWVtYXJyOwogIHJldHVybiAwOwp9CiN1bmRlZiBtYWluCmNsYXNzIFNvbHV0aW9uewogIHB1YmxpYzoKICBzdHJpbmcgaW50ZXJwcmV0KHN0cmluZyBzdHIpewogICAgZHVtbXlfbWFpbigpOwogICAgc3RyID1zdHJSZXBsYWNlX0woc3RyLCAiKCkiLCAibyIpOwogICAgc3RyID1zdHJSZXBsYWNlX0woc3RyLCAiKGFsKSIsICJhbCIpOwogICAgcmV0dXJuIHN0cjsKICB9Cn0KOwovLyBjTGF5IHZlcnNpb24gMjAyMDEyMDYtMQoKLy8gLS0tIG9yaWdpbmFsIGNvZGUgLS0tCi8vICNkZWZpbmUgbWFpbiBkdW1teV9tYWluCi8vIHt9Ci8vICN1bmRlZiBtYWluCi8vIAovLyBjbGFzcyBTb2x1dGlvbiB7Ci8vIHB1YmxpYzoKLy8gICBzdHJpbmcgaW50ZXJwcmV0KHN0cmluZyBzdHIpIHsKLy8gICAgIGR1bW15X21haW4oKTsKLy8gICAgIHN0ciA9IHN0clJlcGxhY2Uoc3RyLCAiKCkiLCAibyIpOwovLyAgICAgc3RyID0gc3RyUmVwbGFjZShzdHIsICIoYWwpIiwgImFsIik7Ci8vICAgICByZXR1cm4gc3RyOwovLyAgIH0KLy8gfTsK