Problem:
 Score : 300 points    Problem Statement You are given a string S consisting of lowercase English letters.
Another string T is initially empty.
Determine whether it is possible to obtain S = T by performing the following operation an arbitrary number of times:   Append one of the following at the end of T : dream , dreamer , erase and eraser .       Constraints  1≦|S|≦10^5  S consists of lowercase English letters.         Input The input is given from Standard Input in the following format:  S       Output If it is possible to obtain S = T , print YES . Otherwise, print NO .        Sample Input 1 erasedream      Sample Output 1 YES  Append erase and dream at the end of T in this order, to obtain S = T .       Sample Input 2 dreameraser      Sample Output 2 YES  Append dream and eraser at the end of T in this order, to obtain S = T .       Sample Input 3 dreamerer      Sample Output 3 NO

Solution (Python):
import subprocess
import gzip, base64, os
import stat

gz = b'H4sIAPqraV0C/+19e2BUxfX/zXt5JBsQMPKQVRYMIiELARJf3SUs3IUNpAQQtfGy2WxIdJPd7t7F4NcqmsSyhCi1VvH7a6u11drHt+VbW4t+K4aixNrWFxVBKeKTuwQkiEKqwv7OmZm7O/fu3kD49ff75+dVMns+c+bMnDMzZx73MXc63QsyMzIE9coUrhWQ8lxoJ7Sd4cXeBAtg5cIQ+DtRGC/kAp3D8dkFuybsZ6LV0MT4suBfNvwrz6R0eaZdE45nfGqYwYU5An/ZNeH+bwqaUBAsiXRY1r21FN1bu1oTbs2i+NZcbbpMlq6fpetn/GooZAqaUNUvm/1bzvDlTC81nM/45nP8eFV/JNfj7w1uSm9w2zVhO+Nr16X7JqTLFc79KmThMpafkV2KWfnVUK2HGf6mujllM/z10/1NLZHW6a3lc6bPKSsJB0pmkjIVMt6FS1Zo7FjEyjyKtQGMn9Bz6HhTz57jr5Y8FTiZf/XOH1z27rsYN52ly4N/HccKG7MvGZKZIVhJMTBuBvwrg39D79os/cj73Iv3Nsdf2tDhHVPQPuHjTdfbj08/Lt1UYFlbWux80919eEr3qC3DK388PrhtneuWp43scgQyHJkGPy2kxwsTLUV7TTTA38pOL6fDAP+dQb4/MOA356THawzw+7LS4982kH+ZgZyxBvgsAzu8l5Ge32IgZ6mBnO8b2Ge3AT7DoH5fMSjPaAP8jIGcYwb5/sbAzjsM8D8byL/DQH6TgX3KDOx5wkhfA36vAX/EoJxuAzkfG+h7uwF+0qAdPmdQnrcN5OwxKKfToJwvGuQ7D+RcIowVgt7VGj86I5vi6xm+iuEXZFH8UQ/F1zP8v5j8zaPtGvlXsfIc1OE1kO8IkLO6fjU3OgnC3VkUX89w1T8HMmi+ljot/+PMbtU6+auyqRx7nVaOk8lfzfBCFrGU6XXQq9OL2XnrGK18AcaLsFzvnTYNx4g5giStaQ60SGHZE5IlSZAWrZWW+dY0hWVfqNLvCYd9YUFyLa+S6n0hBi+vqvQHWnzLPXV+H41LHyMF5caQz1Mv3eJbJ3nhl4ygt9UjNYR8PsnX6vUF5aZAiyDdsKQmXAbZBm2lEuYUlkOBdc5li2s8Lq8ToxfXyLO98rqgD2jbLOC5tane1yI1tTTJzrWUIWyb1dDUUi81NIXCshRocFYv9jY3E9mB2Q3+SLiRcNbItjmSBAUL3CrVQdm8nrCcxAOQs8/TDILDvpDs8gJq8zZ6QpIc8jTJYcjduQywWXWecJNX5XYtl5aXSs6aOVL14ppZkp8pSfIAycuXQ4qKZIqmljUsXRrxRGOico1c3hQIQxnDvjIX6DnfRjWtkef4A16P35cAwpU2VJYzF4GaNYjMSgAy06o12+v3eUJOiJkpuSBf+CeTCkNpc6g9nM1oU1TJBfLS1d/MUqlG8jUH5XXQJoLQqAIhzxqfWoW22bQM1Ah1kQZjC8wCHlRPWtPaKgV9oXCgxeNvArFrS5k6ieznz1TtAEWvkkCNWySQWK+iczzBoK+l3snKXu+vXguGkStaArQVyKjQykGVjrSXMm8gkiYtVKxBWkzWcmszSTyX5c7ZrgJMR3uJs7lZU3WJhkBVJa3L48dWIOu7UWBWMCI7vTTdIFsdtBls26T6l4LJmgP1PqLfEuiWkGmrp65prQ2qWAo3SV70DRJ2SegsDQEn34ltoAl4g+YmqDOmdIrFgXluyAetai2om669V9rUns3VddmtjR5ZX7EgO8wqFp1bM/Vr8GuNF2oEKZsgrWi5Fb3DMl840uzDSC9lawiADKHBF2gQGtb45LAAVvIDwqws+1qbZKHZ1+xtDgprwy1BMKTcQIDgOqHB6w+E0amhPOZCmz1NLcLCykppVkmpsNDtmlcpzSyxlSV+ziyZLVSuWuWY55JsJbMovGoVcJeVVGgom40nyQw8k83gM2HGngmz92zyO5vM4zPZX/pfDgtzyT+BcGYTiqbJY/GmBJcak/wvl40/GYKSnZxfV09ZNwxXAr4cdR0CueXQ+FL498D3HszF1VczwyJjm4Zg/q0J/mwypqnj9e7f3pKDK5J2xh+9c2omrizvY7Sn/6FMXKH8iNHy1PtNqOevmbx+iY57uWwdo17qOJ/D1ieJeW1dEi/jV68cPofDV3P4XA5X5x05bH2kXus5vITDD3J4OS+/PonP5OVw+CwOL1pN8TxubkD04vBMDi/mcN4+pRzOr+PLOZxfx9o5PI/DRQ43cXg1hw/h5zccPpS3A4cP4/BGDh/O25/D8zm8lcMLeHty+GwO38DhhRy+mcNHcPgWDr+Ab28cXsrhT3L4KA7fyuGjOXwbh4/h8G4Ov5DDX+JwG4e/xuFFHL6Xwy/i2yeHj+VwhcPHcXgfh4/n8H4On8DPOz1JfCIHmzicXzcVcvglfPvn8Ev59s/hk/j2z+FWvv1zeAXf/jl8Mt/+OXwK3/45/DK+/XN4Md/+OXwq3/45/HK+/XP4NL79c/gVfHnajpjEzpzHF1sEsaNbzlEqCfiCaad2GRCffT+wxCc/AH/NE+3wC+lGjIodjMM1eSPS6GJirxH6bqTRtcS6CX0b0uhSYlsJHUIaB6HYo4S+GWl0LbHNhK5DGl1KbD2hb0Aaix8LEnoZ0uhCYqsJvQhpdB2xakLPQxpdRsxO6CuRRlcRKyX0TKTRRcQshL4caXQNsUJCX4o0uoSYQOixSJuR7juD9EikC4n+hB6K9AiiP6EzkR5J9Cf0F4uAvoDoT+hPkR5F9Cf0YaRHE/0J/T7SY4j+hH4b6QuJ/oR+A+kioj+hX0b6IqI/of+M9FiiP6GfRXoc0Z/Qv0N6PNGf0L9EegLRn9CPIX0x0Z/Q/4n0RKL/aaTvR9pC9Cf0RqQvIfoT+m6kLyX6E/o2pCcR/QkdQtpK9Cf0zUhPJvoTug7pKUR/Qt+A9GVEf0IvQ7qY6E/oRUhPJfoTeh7SlxP9CX0l0tOI/kBXP98OI6byA/j5PK6ptyP57HroJcrrgK3aaTvqir5+kxh9X2z7sK96uaune6toF8SeHXYS9FQX2QVlLbB+Zp44H/zwfZB0hTh9AwRiW3+BGP3o1szandtIH4OO9Vnt8xgVP2ieSJbc2zZw/Dv6s4BfjP5Z3HH4G2LGa+Lr/RFI/CxN/AYkFqO7aPr3Wfr119zmBuNHRqyAlModoGDtrpw1AGWc2In9U2y75iUnMMgXJ4owasXzfbWQW/Sj+Gu1sf+AJOaJQixMw2oFu4qt+4adDUSfFY7rHCsdKxzLa8S7jjwJcc+jqbfjNEN59Kt4XIzutHWLHe/IHvN13eYRWWJPJRkOCZtScgY5ssQusViMLi4Ue4R6LESP3RSiYaGPhkUeGlqaMYwuNoGcogyCVRL3Lkb3itH51tVc9pfw2a8Vu/zWRl0ZcMKk/PK0WobywZShx17M8NLQwGVq5MrU9SVXpgYsUzCdXcac1tvFpysTK0tRmJXJN3AZglwZhvBlaMEytOrKgBMN5f6v1DKUDqYMYJez2KOVK8t3vojHXdEXqzqOmts34Pb2dd0O8win4Opx0qJgQiXvK+RyClAWiytaVYitdITYudy6WowWYsPPFuPzihBoFKPVJg0SBITn+Za1VYyuKkLdAaksAnkmyI0UFEJS0F4T4XPajiKbVYwvLopcLHZeJXbEYeS7/l9omHeVb2LYA/oQ3SBBMB33NMY9iXEHVe7GdNyn+yn35/2Uu1HlXp2O+1XG3cO4ydD9fFHCuhNJ3judtpOYuljsesCKTmH7C+iaIN0jpEyVJlZJxOKu6AFOwj9JDi+KHUflazA51tH2a1yY/JiymiSnFYXZl9NK9ltFQE04pANIJq29Y5Px8EMkM9UMaAultqPuqGytruo4KWe74gtMSFncIKOYK8V1/UyPOOoxXezaZN2MkVjuZ4eSTN9VQv3plHnXHb3dusrd2UwKVuTcGOENdOYUNqwXOOTIKaKw7R1UeabD/PSutv4VkSxX/EVUfwvJ65g7+oniJdk5WXbMCNFedyeU39V5rdg5SwkS6dlWLPRQqDqTuf2JbGxl860m2tzmW0k6d7TeWu7uBKVdbVdbBXP7mzD/2TXfas/oBBO1d2MDKIqUoIhIsdgJfbJVeQZXeGLFq+aO/SOpAXacjMfX3261Q/oPC7DV3G4VtwehrmxvPIOVoWxG3dr64+b2jdmYqdbIn0JyYuFuGWpLaEXx0NkzWGen5uxBc5Y6bR/25lP/77rrBQEdxbY4ve50dWVni9fEQYHtuHXgMLs/E0GzcrFzBfTfP1kLoSjKE5AXZGRu79I22JaTpKLBYI7tmKE8DRQTu35PUmEFKDCRU5STaZutOxp3R08qV0LFYHOa7YovMUVmuDpzteZSMlD3U8r9n4MULFkDXCXmifSOq9j5HUGZC4aC0nXkYG115omdqxQo0nMk3rykt621X2gdBtkpv8EaBoYu97S4feMVJk6Vn36uU+UKu3n7m6TJEp02WftQlz99frYueMPnahf8HyKneHsn7X9oj36UsffztE2xKvoRaYjXKe7OSS5w84rrquVWJTLeHf1YKTtJVHygu9es0Z+OCpNIU5sAHbRoGzXci2JUidRiM7vhs3gcmmUR2jgXbSyPa++uih4xt+N8L/Y61BQnL7pTVwHAGXGg/UeCnPZ3zO3PYqr/hfUb/bOr7YX+xDykibSpPod5R7Y12m79GXT0Thr0Xi+2dfc/Qxn/Ijc+QxjNO0zRTZSNBr0rNWx1RmzVjs5sa5cYd0SHWzu6xehb5vsuAE5sd49CvFIOJY1lANJp6vpmPFrY8RfzfVfyDBciQ7GW4eHTHMPJE8DwXUBop8MaUu7+jAx9Yk+79VHcYADzoKk6g4rYtmsUdhWElS8/RTmU2P4NqPlncW2g/IyDsdXPhzbANZrJJ9RGY26/NxebNc1FxFGUy1HfbLYhGGsgKTRuhngnc0dbPvU1KzB78ErlBs4MGpG5fQZONNDtdUzGX+qoNeQzOmqNABmxYRBTFT1FTRI4gSbZ5erJPbjITrzFBljIbSdxJ05QhQkSRjvgGkc58ik18+Y8gSRYD6Hy0AmNMYo+TRrj1TxqDORTjYG/jY3xcyL5dmu5YrHQsdgC2hF7qP0kxSVfO4KaqeQ49Q+d1YoYf1mMLrcWuqPQHcGJ2004F7K4sGftNrc/CYbF+birswrycJjEaRloiR1nslzRf1RN/cy86bFslAkDATrOeyWgwFvHNoGjJcYToycw1qRc/ikZ06BM7k67gjYxwWp3O95wfBZnN89U4JDQrWROohbDWNvJZ/fAnOAZ3OkhminycawxKOMma+EQNAm1EDpwlGbCCsBFtzKuD1p1ZzljcPVkW9W6Kx6i1t1cLFKXpLjAF6kx7ugZZcZxWnmlQ2hRLBAqbx/XVN6NfYkZSC1WHPKoFYe/DSuut5zv/eb2WuAw8AAxMYO2ChQIkz5NXVaTuJzdV1sg33ZSdrEzfz+SaN/opmwCQXFQja24TgNJrUQlXs6MjCRXn5faEvchFNdx2rLXI/EtUJebH9ceIz3C1o3e1k1nx7mungV0coy7GsrhPmQBHyuaXNElZG48XIwWo8FggutEECa4C9gEd4GF9tE+F7Q+EzLBpLLKhJNKp67Ah+hkR2n6BDKAei1cDMvfrVC5z2512kHEIezpFmUs5B/bANI55/ck6gozOVPCA372CbYnQGKbMI73y3Yjv1yiYbvSiK2Yy7jmDOd110OeMccZjVu+jWeQkKERET6ji4wyyuPkfMDLuRDlvA5Iw2Z39Et3xgciztvETmFdtpi1SiHzhRE41yhFe647hqZwChvHF3HtPHxUbeds5mPevpvNFo7hbAF3u5V7j6Yb6T8RYdxoa1UyzB3H0dGatxe7sDY7hUWd4/tFaDngp5YQP6WbC71N1ninlHuOQFjxz4jVFe+pqjhl3jQ7jpOoD8nE02V27XfDZLIUl1OFvROSv0l0g2b+4Gp70eS+ym+1mDtsWJaK3WL0bTp4bPoKFnuxHlNyNNJ3taocsgYTVA+yVVA9yOeoeGetgJOTCehZHzhCO81WYoEDMHdQ3gOodxLKJiB1ftn4u/P32a9B0PZKhuI+SusNZxmY/kmUvuaoxuUovdijeqpgtCpBcU+SOVkedt4n1ZG6ZyEb9RZyHmeYyo3zaI1mP8kmTuTecupEaAHzHypPOhECQQ5YMNWJ4J0YrZzvZie5VCfShypkH6X2wFIpFx7ROJGiXm7Bv1i31ic+5Ikj6lrfRNb66EPc0XK0AKzKFpoMVvOwJjchzyRXfCk0LzIT5kvry0NXE1cuO4wexCn0oQfpXpzwIMeUf/ZiFzWjfV+gay5Dd3Q4l7qjt2N03ugbDo571fDkcK5vTXj7EGw+di61+QYy8udPmpu0OYHAmjh5UG2+N09v897sJJdq85dwmrG5l9r8IBI/Payx+c9iZ7P5zN5Um/N+29DmCwZ22y8zO/1OQaPn6m1+qgoG3gYobOzDEdTsR+kUHxYlFT3mjqtycQpAeng7Hfo10j/JoQY3pcQ8ATH2dphiHQe5sfep8N4J+GcJ/IlZMwhCzIPlWxaj6zQbriHY9HIk8uidVP4QumB77xAUuk+docQ+hl+JmePsmH7maMlVfcczMVpNBKnBiQvuZhP7oCcozqWeoAhCpTam8QQHDiVnjleyOUJRbnICgr+NZ44jqcZ0YR89FssZobVAtYJTJ4gk9o59XMhHv6vYktGy1QL9zNz+OUqEvgaNMoMuTTWWOp1N+9sfPwZL/UU3zprbqzONZ0BXZeq5KwfgLknhnjMA9yWZScvpO2krdYyRWbSTWsjKI/+OWclOSiCwNdaT2kmDufrWd1N2kkvtpKuxRnsP0dpvReLMx5pOGv/obJ2069D/nU76GOuk+R+RThp0Qye1u7WddAfW4jcKSKOgC5BHYOkXC5n0th8ywMz2M0HP/ZVgzH0ohfvYANxvC5pJ37x+bkqUDYrFSvs1c68veYYPPgSGmJbh0n9xDH9GhsJ/aSdn5vaXB1D2D9pZaM1xTlwYxTmOa/I7wOe3DBn+9i8NQ84XHIMNGU6QLdXdpF9yjuIPHzBH8Q7tOHQsIzuuWyDt9t0i3TKd/mHarRpYGyt1WLnXZuJ9rUJ9LfxmAKUfTunnPxmAe1MKd/cAPfdXKf38qQG4f5yJ87+exA6Ouf0JQBK7OHnaTZzY/Zma2qro5Wz94vtg68t69ZV/xwC5N6WU9dsDcH8rhbt+AO6lKdzXDcA9T6vYwlOcYkfeA8Vmn9K0sn0nOYa/IkMPIFwT2oxN6FXWhA6/Z9iEJuK2Q3L7LmVbQs6k2xIPHcSh13jeFs6k40iA8B2VV7viVUWRG1wwAa/qjJjcFSfkcrFzGpYPsoKoCbhtSnd3rjqIPeGYMgvDniz67MBOk6viQORvLjaDN2EhRh7E7bBjylBkvOsFvHd4o+NbjlrHTQ6pdqfW2rYBWvR4badfx1v7DpAdW6O19rWMoQgXVLXIcAUgjs48sgNo7ugmo7H5vq9YrWxAQbOR7/BJjaCH+GobhQwdWoZv8/7uxLvAIGn9XRbvf95AhuNahst5hv9GhiKdQzy3ZXHwKCenCeXcdFST0Q95XURk2HjyfJbFxXyBBZQzRl/gf+dyfwa/yfq9A5DdhNMavebwDEFksJJd2M9xa17dE9W0/VguDrifuKL7sXGePoBzsNutq6C70C2/K0ifmZLSZ57IoH3mqn/Se3Gr1Dt31djiryA9ckpKj7wwg/bIHJaqWk0lDpTKzFK9up+mEtVU5epdQhN3l/DhA3S/9SeMm9yGozeW8G4S7iimdxdn2J21xv1kpm5uX4q2gdm6ucOZmzJRj+TjJP3q/ei4c3VbPOfQdu7ckainl0BG7++0HuDhAeYh7Smzlk3G3L23aVnvHoA1qFHidiO2m/kWye8Lxd/BFqndgJrPMxxAhplahj/yTfY5ZHhc26abeAk/RIbryGMUfmsRv3z49B1++RD79mm2LZwzpFizCTGyeLCbEPjMbNpNiDv3c5sQ92PJcMB2RXsSbXHC28jht67uHdWb2auJyoSoROFnY+G7ZOtqV8UnUPlkz6i2Xx3byIDDkv11H23dO/eRYbGfDjgv9kPCyF+rol+5o4eUt94hszMXDFJuGClJuu/v47Lb9Ta9ndGa7i57E8vBs+9c7vdfxbhn7TuX+/35jDtn37nc7393L+V+ay93v98VPYI6nnib1G9CpRMgkczIYDBWceUAgjb6XExiGfoX1RIgBtye8sw+bDjYZvK+VNvMm5M1mygHJg92E6XRaBNl8dvcJspNWL6ldNnc6yRZM9U/fIurrgv3DTx/2c3Wwb99i04xLgP+pzJiP4Ixj9wwIRvXVLGvrJpt/ZzJg93W788y2NYP7eO29TugxmIHMularjPnHqtmuXufdbDL3V9kGSx3v9rLLXfNQPRm4RYEeOZL96IxTimX78U7bmdivziun12fbX9ANVtyzwKfMbAoe99ie/sDbTW/TwaTU8q4PbTucrHu5AhOLxvJ9LKOn17ak/fj008z//EmnWb+7c2zTDN/9SZtAz8l4SHlr2+xW/bcyGWCxhJz/GvwE547dyUc8QWgV+8fBz9jUojvPpGc/xPFDpCHQ1WD2/+QQbeI7j6SBqzhQLzL1rtOW62jBpg8x4VkteLDAsS2rf9IOIRTxH4DbmX4qY9R5v0DWwG2h22QBEoX+1mvZtx6gp9jfgjcsQdOMv/COnl8N9fJZ9KMze3fwAERMjd3zD5N75xoCzAngxZgB6SOjTx9PvPjEn7a6sKijdduBDi+5BiKkYHc3D6Pea3xwwpcdr/is3sG9Xr4S31v/dEAM6IN2p2ZN3hxN6O4bkB67xzMTIhsbhiuLH/LporXvIE1eiQ29iuN+QL8PkoMeGK1X/DD1TFlPpbqwy81qS7jJzpPYarR53Wv7iZ+RnULynGfPh854/hnPiahnCF4m4zOMcK7yfOxjpU1YtsRmIidcXXehA8KyNOIySanmOyXzGRDX8ctQHpfFtIUDZTmIZZmz2skTRFLUzhQmnaW5jGahj5h1HkxJrmUJBmf6H+BN+j84lbCmkud6gtFNzpu0qzH5RVJa7mt2Z3wr9elYfgmzzAcGIb3OjUMS3iGUcAwqnceZ+kPSc2XWZXnoCSxPdoJ8pckEoYb5RGMPaKNHRGnsYXKXRibCSR/f7JGjH6Jqo9FPZcCx/P4Jha7g4jyei0wPk+ZwAbkrm0Y3bl1PfzF24f5r6MHyslV4zu3VOPoCwLnrv+PckHO2VhZ2TsGZde8ipxZ29njifHqUvP2PpKZ0ohCoj03xiTITzn8CpQwUb7k89TVrihUQh7ez6jqvNVEFmD/LZAFWJG54+e0Fl2dLSaxole+w/EnrPBeu8bKF6TWEzd2zSAWvhHK2WttUPN3d07DIflSF3r78S7mbN0VhyKP4yha+4pmuMV7xn9njYmMtte8QicZs1/BFrTQRB82iCuPozXaXjBxOzz0+UGsDyUvTtrdjbEzfye1pasv5dAZFn8gfXyPGr89ffzP1fgf/523NT5vg4/F84+w7yUz6k+h/7Z3yzPMUzvwJRDz1C47CX5QTYIfrSbB40ESNK83T41sNk/9zqPuaBc+BeaOdliIRh+IXfPMYtvBPnHqTjG6X+zqEAjufE3schZC+FKP8wV8QLbH2W0hOxHObrwPF90jRl8Wozsc8Tccf8JbSR3dssPt7Re7VmyznUR7zv47fW46esQFHdTRFs+ImDZmOTZkW3sLwBuJ+DTkF8pEsDq5ueeqeDEyuio6xR3tE7t8e7lacLAdxKrod4SNOQVjLULlhvnXFPW+wd4fANtE446VruhJxwpX9E3HcnfX5PWjLWC3rukbIKxxT/3I9o6443QWviGkvPlXOlu4ONGeoofd0ZPzQUZ81H5oMhnQWiOHSVOoVUuxk6uvEzvZu0bs1SJ8D3RGvW/tjLBc39QiXO+sEZYsFQKh+uKpFl9r0OeVffUWjwVfPPbA79AVlrqIbKFvJlsCDRa/r2WN3GgRLA2BSEu9wL+LfeWV+Gp0oAWoiFe2tET8fktLQLas9fib6oXJ/nohJFQGIv76lstkC77Pa2lo8vssgmvGUiRDHnx12AL/k9d160msEJomLECuS1iKQMiCHyuA7OhriUtsM6WF7qXzHG5JWiLZyoPr5MZAS5N3Nr7zHK5YDn+doVAg5GTvUw3Mb5tVI3ta6vG1dJboLPKd6ivP5yp/nifs4xNtZu+bWhbZNe+rJt5vZHSfi8ZXL7Knje9m8UGD+M0sfrMuPvEeHMPxfhl5T3IB4x+dnn+rjr/bgH9ge8x1LdXUzlntN8fZsrYpFGhp9rXIupRafVcvTq+vGl/K4h9dnF6/7sVa/Q6el3620pUef4RvgWr+he6B68Pu1uYvLNTmnzEu6yrs4fhinNITj+PzONtejsdbYfWwD0LciH0JnAd+f2QvOhHcQsIH2iHc0A/xEOLm8jYIi2Du2AdhOYT4msEqnF1C2Arhagi3QGjBO08wndwMYTFMRveyl5fVd2UzblsmZLQWZowbnmfanJFXOIq9b2qDsvDvSabnp+98In8h6oKyCwoXFBQtMg+71bRe+MbYqy6fZb2UT5+lS6/mtxXyI47BUVDIfw8t67ZqN0mRl4WfWslS05Wx9003QLr8aYKQfftSO6adV1A0r8Ayr6B4XkGpo6B8YcHB0W15m3K7cu7Nvi/rnkwiF3dFV38ejz+At47mFRQ6CormF5S2Zd2bScvza2w3YPMHWXnaMml+L+D7oqfi8cMM1+XlKLBrskrYDe80W6DuRnLyEMcFabEOR52uADwI+EUZFL8nszI/tzopW5W7HOJNaeT6AS9Mg7djW3kpHr+EszN+l20/4BZoUz6B2uO+TGdB0b1ZzgJLV7azoHhTjlhQek+uWFDelldVYPejpqBvMdEdLAB2MBH5VlwBg5xMXZ+IZ+1rX79eyNqTXc7eSp+EbeJPjLgSCXy6FImrkfgHI65FQsqkxC+Q+HUWfZ27C1+M7GXEY0jI2fTF6ihqdzibvj3+R4x5JIe+Yl6PD0rj5hAuF5Ziws5c+jL8eCz9F7n0DftLkJiWR1/fnoJEOI/mU4IEbvO9pn4ZYNUQ2jL+gO99bgLiVVXnG4fS7wORp9Sbh9KXiN/D4jwMRJ4q4FHIHtMewRc5tzOiFt/a/GQYfRE9hMSFw6m07yJhG05fnf4DtpXb86l1dmLMsXya5nnM9HIzfXPfgkW/wUzVLkXi+kIq7ToiAIgq/KAR2q17BJX2LYyxjaRsIv4pu4DGbMWYxy+gBiEWRQ3fSXyubRRN81Ms4M9HUbVLkdg3hgpw4GMniy7kBFx8ESX+B19GdV1Ev5dQg9b3jKMxV6Mn2jSOxijI9j0gbjcLX19fX19fX19fX19fX19fX19fX19fX/8/XZYiuq9iZ99xF4q0+zIZBuGBbC2t6Ogc9tE29Zto4igqV/0W2u9FSqvf+FK/I65+w0v91pn6rS+Fxav7Guq33D4/Ew9guCWTylO/FddoorT6jbh+Fq9+020bY1S/5aZ+g2y0zj6Jb9Kx74apa3NLtnZfR/3mnPrts+JCuwYvN9s15e5j4RBd/mfiTJ8Cyh9ntFqOPkZbCuz/T9tJ4jv2uuseVq8PsvAJFj7Nwl0s3MPCj1l4koW5bF9vDAunsHAOCxewcCULG1i4loX3sPBBFj7BwqdZuIuFe1j4MQtPsjCXfX94DAunsHAOCxewcCULG1i4loX3sPBBFj7BwqdZuIuFe1j4MQtPsjCX9bsxLJzCwjkXpq/fhZWVV1qKV9RFWuSIpaykvKRs+swIoWx32MpKSstKyqZSXGBMXr+nZY1lrS8UxtsMs0pml5ROL6NJZt4hhyJhed1MS7HsWROesczpdjpqnNKs2aUzGvDzqFMtxfjF03q8O+F2r6yiyacKQkl4XbPsqYNQDtGwUf3V1CL7QkGhpCUg+0oc81zTQTSj1rRESuoiTf766U31AqEaPeFGoaR+XQvIo6EcojGswBpCgriQz+9BRvYr6Jcxyyb4K/ta4S+UuwniAvUe2SOU+BqlhpCn2Sc11oeSFAj1etmnaSWZfA6ayJA8oZBnHZWh/r7ZGyIF8zQ3eSFdQCZ/aL40j7pwWCjxBppxb/7/uJ+NYz5U9TPJ8y4Ejf/T+2f1miRov7GZPE+C+S0df7aOtunSyyy9zADrWdLjfuhJ8FFqetUvb2GA6kVydH5cvZYwn5yp89v9DAiyhLlMd5POf65kvjJTNw40mrR+38h+NzGfm/DzzM9a2Mc6ZV35dcd6CLcwH57Qn6XfwtI/KiTLn5VG/9uYTTN140a5WTtu6O2n6t+uS6+OQ8WF2nErh43N+vT3CskzUPhxWxylHY+N6j+qSx9k6YMs/Wu6ze1CXfiALr06L7GzgTVkS59evf5Tl16dZ/xe1I63RuV/VNf/uln6bpb+payB839Slz55LkuyfgbK/2ld+sIqOwsp7dfZT99+unXp8bYODVn/yxw4/zcE+l3aLN28TD33Ra+vPv8DAr03l6Wbtym16fn19GFW/sR8h6XvO8f0xwTtt5aT5/BoO2quLr2qV78uf/X7zf3SwPmr4WldenXeqDq+1oyB0+dmaNO3su+otnrOzf7DMyimple/M72BpVd09a8fD0aw/Et1uJr+HoPxRw1HCNrvOKtXQR3zHxkD+1++7fKXcjMND7IFBN7ncafxX0MM8n+plfk388D5D3RlAbc6HmvxzMQ4q8WzEuOnFs9OjItaPCcx3mnx3MQ4psXz0q4DssAqW9LiQxLjiRYfmhgntPiwhP/X4sMTfl2L5yfXkRq8IOGHtbg54V+1eGHCb2rxEQl/qMVHJvycFr8g4b+0+KiEX9LioxP+RouPSbv+yYLVnuoftHhRst9r8IsS/VmLJ8990eLjUrAM4rOPx/U4/QZ7qh2cpD8l60X9VnUtkTVW6NCdB7OJ8avPXahn2zzHcPX5GBU/znD1eY3DDJ+cQfFgJcUfUM+DYfhBnZzbGd6tw3/F8EIm/0GG4wvOiK9m+xX57OPTtZlUr3adXn6CmxPPl6j+4ocMV58DUvFXGb5Zh2dmUVx9fkbFyxnercPrGR7Uybmf4Vt1eDfD1edk1G9n9zFcfV5KPTNgUjbL16XFVzJcfR5I/Xb/JoarzwGp3/7exnD1eSv12ZWPGb5Zh4/KYfLdWjnzGf7aIi1+K8MP6vL9KcMFHf56Tvp2vp/wp/bTWA5tD5t1/ucMw7t1+Ihc1s51+134yiG2n7t07WcOwVP9Ri2TY9HJaSL8qf7HSK8NhH+E0Krrvw/mptdXMPADjxH+VP+zjUx4Lkgp/18Yri/nfiIn1e99lItzhlQ/1pdrcM5cHuLgH5ifV8f2iQz36OplSl76c7B8eenlb8xLf57Zwwb4fxnI2WGAHzDAzSbEU8e10ab0/Fca4FUGuN8A32KAP2OA7zalP99rzJD0/FOHpD/3a8mQ9Pa8eQjO+ZLjuLqeWGcgf4sB/msD+buG4Jw3tb3tNpATH5L+vDTrUAP7D01/nlnYgP/7yJ95kbBBV55HDPifH5r+XLQ9TM56nZwPhtJ+YWf29DH8hIH86mHpz4FbMyz9+XMdw9LL+fkw5BmbotdTBvyvDEt/jl3W8PT8kwxw0QBvMsA3Dk/fTh4x4H/KAP/KAC/IT49PyWf2qdfaZ5oBf9AAb89Pfx7e9vz05/YdzaftX18vn+WnPz9vdEH6fG8xwO8wwB80wH9fkP4cwVcM+A8Z4EPN6fEJBvjVZtovqou093EcBE9dpyw04/krMC6zeexFiQNpQ4GAPCO4ziN7A/W+0IxgKFDn9zWHZ4Q9zUG/b4anzltaViFVzsCTskq8wSA5LYvfK7YJiSefw5E6ySUlOKUbjB6LttkkCXe+5aYWSXKXLQm00GPnzvkp6vml9FyxwTxmf15pZp5DmjJ8ReGcONUH3c+pKMm3FlT2xedizrkNkRavHAjNJqefef2uRUtqSiUqkhzUB9f85V5/OJQ+vZMmDAeRBRLUO+c2BEK3ekL1ruWSsyEoYfrg0pq5Ei1SmSShnJCnhdT8bPwz0+tn5ze6yyWpKUDuSOBJhIN5Tv4c+PXvUZxLEt2rHeeQJM3bBmdPlXyn4ey8FYNSgX+bBbhrBmnTmsHbtGbwNq05L5vWDMKmNYOyac2gbLpykDZdOXibrhyEqivPvfDekByWIw0NJV5BkhZVLpPcrprlkiQkD4SV5GbJiwe/hoU0kCTVB6Q1/kCdxy/VgxcJS55Iq+AN4GAg++pL5lSUz0zPJCVvE0pQqaF1Ar3VWB9pbl4HSThKSt5dZKyStGCZo8opOZfMx2NtScnZb6b30gULapzLpeWOeW4ncmhE1GsBcrajIM2/fomjylUp4H1JFdOfMWq388c2srMhveEI0UZIpBrkkaM6qenPsdVnffaTfcmpmXrZmrM5UyIHPItXw41HWDKt05/vqZVNjuJkEDsoM+VkTV30gIen6kuecgyp3lzJEz/12ZzHGb463fBs0dTCpznjV1eoAY9eXiqRly2lSNhXn3rur1YSPddUV4QBDm/WN3HD85nTNZCUE1vTMKU/sDlNW0xzqGwaLs0ZxfqaBd3Uzp9yYHJqzyIn++pF1IcDUiOMSX4f36fZNOTfeHq0tgdVJA+dTWmTmkOY9VqkHnOsV6guHObqN3FGtl7QuR3/a7dzZ9qmHlqctqelnGCcKkR7ynM6KdqjxLUS0h1ATo/yTdMTz+98bF0v9wX01ZQ8ClxbNjLCnN+p2Lo8yUvNKY3jnA+lNupwBkd569h95AmddMd0p1bmv+E46jQuXQdpznmGOHYQs/7g9NROr57InWoPdqZ2GkPpDxzXstBDopM1YytLPbdalwLPjlZ9ypIKMGtLBHse5CPJAamVGs5VEwbzLJeqFzRVg+sAh1czU6oGS0lrPeCZwriKXuNsrpkt3Sb8b7VdPmBWiAAA'
bin = gzip.decompress(base64.b64decode(gz))
p = os.path.dirname(__file__)
pymain = os.path.join(p, "a.out")
with open(pymain, "wb") as f:
    f.write(bin)
os.chmod(pymain, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)
if p == "":
    pymain = "./" + pymain
subprocess.call(pymain)



'''


def str2int(s):
    a = []
    for c in s:
        ai = []
        for x in c:
            ai.append(ord(x))
        a.append(ai)
    return a

def endwith(s, i, a):
    l = len(a)
    if i < l:
        return -1
    k = i - l
    for j in range(l):
        if ord(s[k + j]) != a[j]:
            return -1
    return k

def main2():
    strl = ['dream', 'dreamer', 'erase', 'eraser']
    intl = str2int(strl)
    s = open('/dev/stdin').readline()
    j = len(s) - 1
    i = j + 1
    while j < i:
        i = j
        for ai in intl:
            k = endwith(s, i, ai)
            if k > -1:
                j = k
    if j == 0:
        print('YES')
    else:
        print('NO')
'''