Problem:


Score : 400 points

Problem Statement

Takahashi has a string S consisting of lowercase English letters.

Starting with this string, he will produce a new one in the procedure given as follows.

The procedure consists of Q operations. In Operation i (1 \leq i \leq Q), an integer T_i is provided, which means the following:

If T_i = 1: reverse the string S.

If T_i = 2: An integer F_i and a lowercase English letter C_i are additionally provided.

If F_i = 1 : Add C_i to the beginning of the string S.

If F_i = 2 : Add C_i to the end of the string S.

Help Takahashi by finding the final string that results from the procedure.

Constraints

1 \leq |S| \leq 10^5

S consists of lowercase English letters.

1 \leq Q \leq 2 \times 10^5

T_i = 1 or 2.

F_i = 1 or 2, if provided.

C_i is a lowercase English letter, if provided.

Input

Input is given from Standard Input in the following format:

S
Q
Query_1
:
Query_Q

In the 3-rd through the (Q+2)-th lines, Query_i is one of the following:

1

which means T_i = 1, and:

2 F_i C_i

which means T_i = 2.

Output

Print the resulting string.

Sample Input 1

a
4
2 1 p
1
2 2 c
1

Sample Output 1

cpa

There will be Q = 4 operations. Initially, S is a.

Operation 1: Add p at the beginning of S. S becomes pa.

Operation 2: Reverse S. S becomes ap.

Operation 3: Add c at the end of S. S becomes apc.

Operation 4: Reverse S. S becomes cpa.

Thus, the resulting string is cpa.

Sample Input 2

a
6
2 2 a
2 1 b
1
2 2 c
1
1

Sample Output 2

aabc

There will be Q = 6 operations. Initially, S is a.

Operation 1: S becomes aa.

Operation 2: S becomes baa.

Operation 3: S becomes aab.

Operation 4: S becomes aabc.

Operation 5: S becomes cbaa.

Operation 6: S becomes aabc.

Thus, the resulting string is aabc.

Sample Input 3

y
1
2 1 x

Sample Output 3

xy



Sample input:
a
4
2 1 p
1
2 2 c
1


Sample output:
cpa

Submission status: Accepted

Solution code:
import math,string,itertools,fractions,heapq,collections,re,array,bisect,sys,copy,functools
import time,random

sys.setrecursionlimit(10**7)
inf = 10**20
eps = 1.0 / 10**10
mod = 10**9+7
mod2 = 998244353
dd = [(-1,0),(0,1),(1,0),(0,-1)]
ddn = [(-1,0),(-1,1),(0,1),(1,1),(1,0),(1,-1),(0,-1),(-1,-1)]

def LI(): return list(map(int, sys.stdin.readline().split()))
def LLI(): return [list(map(int, l.split())) for l in sys.stdin.readlines()]
def LI_(): return [int(x)-1 for x in sys.stdin.readline().split()]
def LF(): return [float(x) for x in sys.stdin.readline().split()]
def LS(): return sys.stdin.readline().split()
def I(): return int(sys.stdin.readline())
def F(): return float(sys.stdin.readline())
def S(): return input()
def pf(s): return print(s, flush=True)
def pe(s): return print(str(s), file=sys.stderr)
def JA(a, sep): return sep.join(map(str, a))
def JAA(a, s, t): return s.join(t.join(map(str, b)) for b in a)


def main():
    s = S()
    q = I()
    qa = [LS() for _ in range(q)]
    f = []
    l = []
    rf = False
    for qi in qa:
        if qi[0] == '1':
            rf = not rf
        else:
            if (qi[1] == '1') == rf:
                l.append(qi[2])
            else:
                f.append(qi[2])
    if rf:
        return JA(l[::-1] + [s[::-1]] + f, "")

    return JA(f[::-1] + [s] + l, "")


print(main())

Submission status: Accepted

Solution code:
from collections import deque

s = input()
c = int(input())

que = deque(s)

flipped = False
for i in range(c):
    query = input()
    
    if query[0] == '1':
        flipped = not flipped
    
    else:
        t, f, c = query.split()
        if (f == '1') ^ flipped:
            que.appendleft(c)
        
        else:
            que.append(c)



ans = ''.join(que)

if flipped:
    ans = ans[::-1]

print(ans)

Submission status: Accepted

Solution code:
s = str(input())
n = int(input())

stat = 0
front = ""
back = ""

for _ in range(n):
    q = input()

    # 反転の場合
    if q[0] == "1":
        stat = (stat + 1) % 2
        continue

    judge = int(q[2])
    if stat == 1:
        if judge == 1:
            judge = 2
        elif judge == 2:
            judge = 1

    if judge == 1:
        front = q[4] + front 

    if judge == 2:
        back = back + q[4]

s = front + s + back
if stat == 1:
    s = s[::-1]

print(s)

Submission status: Accepted

Solution code:
from collections import deque
S = deque()
S.extend(input())
Q = int(input())
reverse = 0
for i in range(Q):
    list = input().split(' ')
    if list[0] == '1':
        reverse += 1
    elif list[1] == '1':
        if reverse % 2 == 1:
            S.append(list[2])
        else:
            S.appendleft(list[2])
    elif list[1] == '2':
        if reverse % 2 == 1:
            S.appendleft(list[2])
        else:
            S.append(list[2])
if reverse % 2 == 1:
    S.reverse()
ans = ''.join(S)
print(ans)

Submission status: Accepted

Solution code:
s = list(str(input()))
q = int(input())
f = []
b = []
cnt = 0
for i in range (q):
    t = list(str(input()))
    if t[0] == '2':
        if t[2] == '1':
            f.append(t[4])
        else:
            b.append(t[4])
    else:
        x = f
        y = b
        f = y
        b = x
        cnt += 1
f.reverse()
if cnt%2 != 0:
    s.reverse()
    
print(''.join(f) + ''.join(s) + ''.join(b))

Submission status: Accepted

Solution code:
#!/usr/bin/env python3 ## -*- python -*-
from collections import deque

def main():
    s = deque()
    s.extend(input())
    q = int(input())
    head = "l"
    for i in range(q):
        d = input()
        if d[0] == "1":
            if head == "l":
                head = "r"
            else:
                head = "l"
        else: # 2
            dd = d.split()
            f = int(dd[1])
            c = dd[2]
            if f == 1:
                if head == "l":
                    s.appendleft(c)
                else:
                    s.append(c)
            else: # f == 2
                if head == "l":
                    s.append(c)
                else:
                    s.appendleft(c)

    if head == "r":
        s.reverse()
    ans = ''.join(s)
    print(ans)
main()

Submission status: Accepted

Solution code:
from collections import deque

S = input()
Q = int(input())

s = deque(S)

rev = False
for _ in range(Q):
    q = input().split()
    t = int(q[0])
    if t == 1:
        rev = not rev
    else:
        f, c = int(q[1]), q[2]
        if (f == 1 and not rev) or (f == 2 and rev):
            s.appendleft(c)
        else:
            s.append(c)

s = ''.join(s)
if rev:
    s = s[::-1]
print(s)

Submission status: Accepted

Solution code:
from collections import deque

S = input()
Q = int(input())

# T = ""
# for i in range(Q) :
#     Query = list(input().split())
#     if Query[0] == "1" :
#         S, T = T, S
#     elif Query[0] == "2" :
#         if Query[1] == "1" :
#             T = T + Query[2]
#         elif Query[1] == "2" :
#             S = S + Query[2]

# T = T[::-1]
# T = T + S
# print(T)

d = deque(S)

rev = False
for i in range(Q) :
    Query = list(input().split())
    if Query[0] == "1" :
        rev = not rev
    else :
        Query[1] = int(Query[1])
        if rev :
            Query[1] = 3 - Query[1]
        if Query[1] == 1 :
            d.appendleft(Query[2])
        else :
            d.append(Query[2])

if rev :
    d.reverse()
ans = ""
for s in d :
    ans += s
print(ans)

Submission status: Accepted

Solution code:
s = input()
_ = input()

# 1: false, 2: true
isFlip = 1
first = last = ""

from sys import stdin

try:
  for line in stdin:
    lineArray = line.split()
    if len(lineArray) == 1:
      isFlip ^= 3
    else:
      if (int(lineArray[1]) - isFlip) == 0:
        first += lineArray[2]
      else:
        last += lineArray[2]
except EOFError:
  pass

if isFlip == 2:
  print(last[::-1] + s[::-1] + first)
else:
  print(first[::-1] + s + last)

Submission status: Accepted

Solution code:
s=input()
q=int(input())

state=0
x,y='',''
for i in range(q):
  a=input().split()
  if a[0]=='1':
    state=state^1
  else:
    if (a[1]=='1' and state==0) or (a[1]=='2' and state==1):
      x=a[2]+x
    else:
      y=y+a[2]
out=x+s+y
if state==0:
  print(out)
else:
  print(out[::-1])

Submission status: Accepted

Solution code:
S = input()
Q = int(input())

T = ""
for i in range(Q) :
    Query = list(input().split())
    if Query[0] == "1" :
        S, T = T, S
    elif Query[0] == "2" :
        if Query[1] == "1" :
            T = T + Query[2]
        elif Query[1] == "2" :
            S = S + Query[2]

T = T[::-1]
T = T + S
print(T)

Submission status: Accepted

Solution code:
from collections import deque

s = list(str(input()))
q = int(input())
flag = True  # trueの時は反転が偶数回
deq = deque(s)
info = []
for i in range(q):
    info.append(list(input().split()))

for j in info:
    if j[0] == '1':
        if flag:
            flag = False
        else:
            flag = True
    else:
        if j[1] == '1' and flag:
            deq.appendleft(j[2])
        elif j[1] == '1' and (not flag):
            deq.append(j[2])
        elif j[1] == '2' and flag:
            deq.append(j[2])
        else:
            deq.appendleft(j[2])

if not flag:
    deq = reversed(deq)
deq = "".join(deq)
print(deq)

Submission status: Accepted

Solution code:
from collections import deque
S=deque(input())
q=int(input())
rev=False
for _ in range(q):
   inp=input()
   if inp=="1":
      rev= not rev
   else:
      t,f,c=inp.split()
      if (rev and f=="1") or (not rev and f=="2"):
         S.append(c)
      else:
         S.appendleft(c)
if rev:
   S.reverse()
print("".join(S))

Submission status: Accepted

Solution code:
from collections import *
from itertools import *
from bisect import *
from heapq import *
import copy
import math
from fractions import gcd

mod=10**9+7
#N=int(input())
S=input()
Q=int(input())
Query=[list(input().split()) for i in range(Q)]


lst=deque(S)

flag=0
for query in Query:
    if len(query)==1:
        flag+=1
        flag%=2
    else:
        _,F,C=query
        if (int(F)+flag)%2:
            lst.appendleft(C)
        else:
            lst.append(C)

if flag:
    lst.reverse()
print("".join(lst))

Submission status: Accepted

Solution code:
import sys
from collections import deque

sys.setrecursionlimit(1000000)
input = lambda: sys.stdin.readline().rstrip()

S = deque(input())
Q = int(input())
rev = False
for _ in range(Q):
    query = input().split()
    if len(query) == 1:
        rev = not rev
    else:
        if (not rev and query[1] == '1') or (rev and query[1] == '2'):
            S.appendleft(query[2])
        else:
            S.append(query[2])

if rev:
    print(''.join(reversed(S)))
else:
    print(''.join(S))

Submission status: Accepted

Solution code:
from collections import deque
S = deque(list(input()))
Q = int(input())
rev = False
for i in range(Q):
    query = input()
    if query == "1":
        rev = not(rev)
    else:
        T,F,C = query.split()
        if rev:
            if F == "1":
                S.append(C)
            else:
                S.appendleft(C)
        else:
            if F == "1":
                S.appendleft(C)
            else:
                S.append(C)
if rev:
    print("".join(list(reversed(S))))
else:
    print("".join(S))

Submission status: Accepted

Solution code:
from collections import deque

S = deque(map(str, input().split()))
Q = int(input())
Left = True

for i in range(Q):
    TFC = input()

    if TFC[0] == "1":
        Left = not Left

    else:
        _, f, c = TFC[0], TFC[2], TFC[4]
        f = int(f)
        if Left and (f == 1):
            S.appendleft(c)
        elif Left and (f == 2):
            S.append(c)
        elif (not Left) and (f == 1):
            S.append(c)
        else:
            S.appendleft(c)

T = "".join(S)
if not Left:
    T = T[::-1]

print(T)

Submission status: Accepted

Solution code:
from collections import deque

S = deque(map(str, input().split()))
Q = int(input())
Left = False

for i in range(Q):
    TFC = input()

    if TFC[0] == "1":
        Left = not Left

    else:
        _, f, c = TFC[0], TFC[2], TFC[4]
        f = int(f)
        if Left ^ (f == 1):
            S.appendleft(c)

        else:
            S.append(c)

T = "".join(S)
if Left:
    T = T[::-1]

print(T)

Submission status: Accepted

Solution code:
from collections import deque

s = input()
q = int(input())

que = deque(s)

flipped = False
for i in range(q):
    query = input()
    if query[0] == "1":
        flipped = not flipped
    else:
        t, f, c = query.split()
        if (f == "1") ^ flipped:
            que.appendleft(c)
        else:
            que.append(c)
s = "".join(que)
if flipped:
    s = s[::-1]
print(s)

Submission status: Accepted

Solution code:
s = input()
q = int(input())

L = ["" for i in range(q)]
R = ["" for i in range(q)]
l, r = 0, 0

fliped = False
for i in range(q):
    query = input()
    if query[0] == "1":
        fliped = not fliped
    else:
        t, f, c = query.split()
        if (f == "1") ^ fliped:
            L[l] = c
            l += 1
        else:
            R[r] = c
            r += 1
s = "".join(L[::-1]) + s + "".join(R)
if fliped:
    s = s[::-1]
print(s)

Submission status: Accepted

Solution code:
from collections import deque
 
S = input()
Q = int(input())
S = deque(S)


flg_reverse = False
for q in range(Q):
  _ = input()
  if _[0] == '1':
    flg_reverse = flg_reverse ^ True
  else:
    _T, _F, _C = _.split()
    if (_F == '1') ^ flg_reverse:
      S.appendleft(_C)
    else:
      S.append(_C)        

S = list(S)
# reverseの部分を対応
if flg_reverse:
  S.reverse()

print(''.join(S))

Submission status: Accepted

Solution code:
from collections import deque
 
S = input()
Q = int(input())
S = deque(S)
 
flg_reverse = False
 
for q in range(Q):
  _ = input()
  if _[0] == '1':
    flg_reverse = flg_reverse ^ True
  else:
    _T, _F, _C = _.split()
    ## リバース回数が奇数偶数のいずれかをチェック
    if _F == '1':
      if flg_reverse:
        S.append(_C)
      else:
        S.appendleft(_C)
    else:
      if flg_reverse:
        S.appendleft(_C)
      else:
        S.append(_C)        
 
S = list(S)
# reverseの部分を対応
if flg_reverse:
  S.reverse()
 
print(''.join(S))

Submission status: Accepted

Solution code:
from collections import deque

S = input()
Q = int(input())
S = deque(S)

cnt_reverse = 0

for q in range(Q):
  _ = input()
  if _[0] == '1':
    cnt_reverse += 1
  else:
    _T, _F, _C = _.split()
    ## リバース回数が奇数偶数のいずれかをチェック
    if _F == '1':
      if cnt_reverse % 2 == 0:
        S.appendleft(_C)
      else:
        S.append(_C)
    else:
      if cnt_reverse % 2 == 0:
        S.append(_C)
      else:
        S.appendleft(_C)

S = list(S)
# reverseの部分を対応
if cnt_reverse % 2 == 1:
  S.reverse()

print(''.join(S))

Submission status: Accepted

Solution code:
import sys
sys.setrecursionlimit(1000000)
# input = sys.stdin.readline
from bisect import *
from collections import *
from heapq import *
INF = 500000
mod = 10**9+7

S = deque(input())
Q = int(input())
flg = 0
for i in range(Q):
    query = input().split()
    if len(query) == 1:
        flg ^= 1
    else:
        F, C = int(query[1])-1, query[2]
        if F^flg:
            S.append(C)
        else:
            S.appendleft(C)
if flg:
    S.reverse()
print(''.join(S))

Submission status: Accepted

Solution code:
from collections import deque

s = deque(input())
q = int(input())
rev = 0 # revが0のとき先頭、1のとき後尾

for _ in range(q):
    t = input().split()

    if len(t) == 1:
        rev ^= 1
    else:
        if rev == 1:
            if t[1] == '1':
                s.append(t[2])
            else:
                s.appendleft(t[2])
        else:
            if t[1] == '1':
                s.appendleft(t[2])
            else:
                s.append(t[2])

if rev == 1:
    s.reverse()

print(''.join(s))

Submission status: Accepted

Solution code:
from collections import deque

s=deque(input())
q=int(input())
t=[list(map(str,input().split())) for i in range(q)]

def head(a):
    s.appendleft(a)
    
def end(a):
    s.append(a)

x=True
for i in range(q):
    if len(t[i])==1:
        x=not x
    else:
        if x==True:
            if t[i][1]=='1':
                head(t[i][2])
            else:
                end(t[i][2])
        else:
            if t[i][1]=='1':
                end(t[i][2])
            else:
                head(t[i][2])
if x==True:
    print(''.join(s))
else:
    s.reverse()
    print(''.join(s))

Submission status: Accepted

Solution code:
import unittest
import collections


class TestD(unittest.TestCase):
    def test_1(self):
        self.assertEqual(think('a', ['2 1 p', '1', '2 2 c', '1']), 'cpa')

    def test_2(self):
        self.assertEqual(think('a', ['2 2 a', '2 1 b', '1', '2 2 c', '1', '1']), 'aabc')

    def test_3(self):
        self.assertEqual(think('y', ['2 1 x']), 'xy')


def solve():
    s, queries = read()
    result = think(s, queries)
    write(result)


def read():
    s = read_line()
    q = read_int(1)[0]
    queries = []
    for _ in range(q):
        queries.append(read_line())
    return s, queries


def read_int(n):
    return read_type(int, n, sep=' ')


def read_float(n):
    return read_type(float, n, sep=' ')


def read_type(t, n, sep):
    return list(map(lambda x: t(x), read_line().split(sep)))[:n]


def read_line(n=0):
    if n == 0:
        return input().rstrip()
    else:
        return input().rstrip()[:n]


def think(s, queries):
    buf = collections.deque(list(s))
    reverse = False
    for q in queries:
        splitted = q.split()
        if splitted[0] == '1':
            reverse = not reverse
        elif splitted[0] == '2':
            f = splitted[1]
            c = splitted[2]
            if f == '1':
                if reverse:
                    buf.append(c)
                else:
                    buf.appendleft(c)
            elif f == '2':
                if reverse:
                    buf.appendleft(c)
                else:
                    buf.append(c)
            else:
                raise RuntimeError()
        else:
            raise RunntimeError()
    result = ''.join(list(buf))
    return result[::-1] if reverse else result


def write(result):
    print(result)


if __name__ == '__main__':
    # unittest.main()
    solve()