#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) ;
}
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 entityParser( string text) {
dummy_main( ) ;
vector< string> bef;
vector< string> aft;
bef.push_back ( """ ) ;
aft.push_back ( "\" " ) ;
bef.push_back ( "'" ) ;
aft.push_back ( "\' " ) ;
bef.push_back ( "&" ) ;
aft.push_back ( "&" ) ;
bef.push_back ( ">" ) ;
aft.push_back ( ">" ) ;
bef.push_back ( "<" ) ;
aft.push_back ( "<" ) ;
bef.push_back ( "⁄" ) ;
aft.push_back ( "/" ) ;
return strReplace_L( text, bef, aft) ;
}
}
;
// cLay varsion 20200419-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class Solution {
// public:
// string entityParser(string text) {
// dummy_main();
// vector<string> bef, aft;
// bef.push_back("""); aft.push_back("\"");
// bef.push_back("'"); aft.push_back("\'");
// bef.push_back("&"); aft.push_back("&");
// bef.push_back(">"); aft.push_back(">");
// bef.push_back("<"); aft.push_back("<");
// bef.push_back("⁄"); aft.push_back("/");
// return strReplace(text, bef, aft);
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnZvaWQgKndtZW07CmNoYXIgbWVtYXJyWzk2MDAwMDAwXTsKdGVtcGxhdGU8Y2xhc3MgVD4gaW5saW5lIHZvaWQgd2FsbG9jMWQoVCAqKmFyciwgaW50IHgsIHZvaWQgKiptZW0gPSAmd21lbSl7CiAgc3RhdGljIGludCBza2lwWzE2XSA9IHswLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxfTsKICAoKm1lbSkgPSAodm9pZCopKCAoKGNoYXIqKSgqbWVtKSkgKyBza2lwWygodW5zaWduZWQgbG9uZyBsb25nKSgqbWVtKSkgJiAxNV0gKTsKICAoKmFycik9KFQqKSgqbWVtKTsKICAoKm1lbSk9KCgqYXJyKSt4KTsKfQpzdHJpbmcgc3RyUmVwbGFjZV9MKHN0cmluZyBzdHIsIHN0cmluZyBiZWYsIHN0cmluZyBhZnQsIHZvaWQgKm1lbSA9IHdtZW0pewogIGludCBpID0gMDsKICBpbnQgazsKICBpbnQgKmZhaWw7CiAgY2hhciAqbTsKICBzdHJpbmcgcmVzOwogIHdhbGxvYzFkKCZmYWlsLCBiZWYuc2l6ZSgpKzEsICZtZW0pOwogIHdhbGxvYzFkKCZtLCBzdHIuc2l6ZSgpLCAmbWVtKTsKICBmb3IoaT0oMCk7aTwoc3RyLnNpemUoKSk7aSsrKXsKICAgIG1baV0gPSAwOwogIH0KICBrID0gZmFpbFswXSA9IC0xOwogIGZvcihpPSgwKTtpPChiZWYuc2l6ZSgpKTtpKyspewogICAgd2hpbGUoaz49MCAmJiBiZWZba10gIT0gYmVmW2ldKXsKICAgICAgayA9IGZhaWxba107CiAgICB9CiAgICBmYWlsW2krMV0gPSArK2s7CiAgfQogIGsgPSAwOwogIGZvcihpPSgwKTtpPChzdHIuc2l6ZSgpKTtpKyspewogICAgd2hpbGUoayA+PSAwICYmIGJlZltrXSAhPSBzdHJbaV0pewogICAgICBrID0gZmFpbFtrXTsKICAgIH0KICAgIGsrKzsKICAgIGlmKGsgPT0gYmVmLnNpemUoKSl7CiAgICAgIG1baS1iZWYuc2l6ZSgpKzFdID0gMTsKICAgICAgayA9IGZhaWxba107CiAgICB9CiAgfQogIGkgPSAwOwogIHdoaWxlKGkgPCBzdHIuc2l6ZSgpKXsKICAgIGlmKG1baV0pewogICAgICByZXMgKz0gYWZ0OwogICAgICBpICs9IGJlZi5zaXplKCk7CiAgICB9CiAgICBlbHNlewogICAgICByZXMgKz0gc3RyW2krK107CiAgICB9CiAgfQogIHJldHVybiByZXM7Cn0Kc3RyaW5nIHN0clJlcGxhY2VfTChzdHJpbmcgc3RyLCB2ZWN0b3I8c3RyaW5nPiBiZWYsIHZlY3RvcjxzdHJpbmc+IGFmdCwgdm9pZCAqbWVtID0gd21lbSl7CiAgaW50IGkgPSAwOwogIGludCBrOwogIGludCBxOwogIGludCAqZmFpbDsKICBpbnQgKm07CiAgc3RyaW5nIHJlczsKICB3YWxsb2MxZCgmZmFpbCwgYmVmLnNpemUoKSsxLCAmbWVtKTsKICB3YWxsb2MxZCgmbSwgc3RyLnNpemUoKSwgJm1lbSk7CiAgZm9yKGk9KDApO2k8KHN0ci5zaXplKCkpO2krKyl7CiAgICBtW2ldID0gLTE7CiAgfQogIGZvcihxPShiZWYuc2l6ZSgpKS0xO3E+PSgwKTtxLS0pewogICAgayA9IGZhaWxbMF0gPSAtMTsKICAgIGZvcihpPSgwKTtpPChiZWZbcV0uc2l6ZSgpKTtpKyspewogICAgICB3aGlsZShrPj0wICYmIGJlZltxXVtrXSAhPSBiZWZbcV1baV0pewogICAgICAgIGsgPSBmYWlsW2tdOwogICAgICB9CiAgICAgIGZhaWxbaSsxXSA9ICsrazsKICAgIH0KICAgIGsgPSAwOwogICAgZm9yKGk9KDApO2k8KHN0ci5zaXplKCkpO2krKyl7CiAgICAgIHdoaWxlKGsgPj0gMCAmJiBiZWZbcV1ba10gIT0gc3RyW2ldKXsKICAgICAgICBrID0gZmFpbFtrXTsKICAgICAgfQogICAgICBrKys7CiAgICAgIGlmKGsgPT0gYmVmW3FdLnNpemUoKSl7CiAgICAgICAgbVtpLWJlZltxXS5zaXplKCkrMV0gPSBxOwogICAgICAgIGsgPSBmYWlsW2tdOwogICAgICB9CiAgICB9CiAgfQogIGkgPSAwOwogIHdoaWxlKGkgPCBzdHIuc2l6ZSgpKXsKICAgIGlmKG1baV0gPj0gMCl7CiAgICAgIHJlcyArPSBhZnRbbVtpXV07CiAgICAgIGkgKz0gYmVmW21baV1dLnNpemUoKTsKICAgIH0KICAgIGVsc2V7CiAgICAgIHJlcyArPSBzdHJbaSsrXTsKICAgIH0KICB9CiAgcmV0dXJuIHJlczsKfQojZGVmaW5lIG1haW4gZHVtbXlfbWFpbgppbnQgbWFpbigpewogIHdtZW0gPSBtZW1hcnI7CiAgcmV0dXJuIDA7Cn0KI3VuZGVmIG1haW4KY2xhc3MgU29sdXRpb257CiAgcHVibGljOgogIHN0cmluZyBlbnRpdHlQYXJzZXIoc3RyaW5nIHRleHQpewogICAgZHVtbXlfbWFpbigpOwogICAgdmVjdG9yPHN0cmluZz4gYmVmOwogICAgdmVjdG9yPHN0cmluZz4gYWZ0OwogICAgYmVmLnB1c2hfYmFjaygiJnF1b3Q7Iik7CiAgICBhZnQucHVzaF9iYWNrKCJcIiIpOwogICAgYmVmLnB1c2hfYmFjaygiJmFwb3M7Iik7CiAgICBhZnQucHVzaF9iYWNrKCJcJyIpOwogICAgYmVmLnB1c2hfYmFjaygiJmFtcDsiKTsKICAgIGFmdC5wdXNoX2JhY2soIiYiKTsKICAgIGJlZi5wdXNoX2JhY2soIiZndDsiKTsKICAgIGFmdC5wdXNoX2JhY2soIj4iKTsKICAgIGJlZi5wdXNoX2JhY2soIiZsdDsiKTsKICAgIGFmdC5wdXNoX2JhY2soIjwiKTsKICAgIGJlZi5wdXNoX2JhY2soIiZmcmFzbDsiKTsKICAgIGFmdC5wdXNoX2JhY2soIi8iKTsKICAgIHJldHVybiBzdHJSZXBsYWNlX0wodGV4dCwgYmVmLCBhZnQpOwogIH0KfQo7Ci8vIGNMYXkgdmFyc2lvbiAyMDIwMDQxOS0xCgovLyAtLS0gb3JpZ2luYWwgY29kZSAtLS0KLy8gI2RlZmluZSBtYWluIGR1bW15X21haW4KLy8ge30KLy8gI3VuZGVmIG1haW4KLy8gCi8vIGNsYXNzIFNvbHV0aW9uIHsKLy8gcHVibGljOgovLyAgIHN0cmluZyBlbnRpdHlQYXJzZXIoc3RyaW5nIHRleHQpIHsKLy8gICAgIGR1bW15X21haW4oKTsKLy8gICAgIHZlY3RvcjxzdHJpbmc+IGJlZiwgYWZ0OwovLyAgICAgYmVmLnB1c2hfYmFjaygiJnF1b3Q7Iik7IGFmdC5wdXNoX2JhY2soIlwiIik7Ci8vICAgICBiZWYucHVzaF9iYWNrKCImYXBvczsiKTsgYWZ0LnB1c2hfYmFjaygiXCciKTsKLy8gICAgIGJlZi5wdXNoX2JhY2soIiZhbXA7Iik7IGFmdC5wdXNoX2JhY2soIiYiKTsKLy8gICAgIGJlZi5wdXNoX2JhY2soIiZndDsiKTsgYWZ0LnB1c2hfYmFjaygiPiIpOwovLyAgICAgYmVmLnB1c2hfYmFjaygiJmx0OyIpOyBhZnQucHVzaF9iYWNrKCI8Iik7Ci8vICAgICBiZWYucHVzaF9iYWNrKCImZnJhc2w7Iik7IGFmdC5wdXNoX2JhY2soIi8iKTsKLy8gICAgIHJldHVybiBzdHJSZXBsYWNlKHRleHQsIGJlZiwgYWZ0KTsKLy8gICB9Ci8vIH07Cg==