##agc034_a
N,A,B,C,D = map(int, input().split()) #A→C、B→D #4≤N≤200,000
S = [0] + list(input())

#すれ違うには . の3連続が必要
#すれ違わなくても、#が2連続であるとアウト

#すれ違いが必要かを判定する
#  A<B
#  A<C
#  B<D
#を利用すると下記の3パターンしかない。
if A < B < D < C:
    need_passing = True
elif (A < B < C < D) or (A < C < B < D):
    need_passing = False

#下記のように考える
#すれ違いが必要
    #Yes
        #すれ違い可能点(. . .)を列挙
        #A/B→すれ違い可能点へ行ける = 左記の区間に # # な並びがない
            #すれ違い可能点→C/Dへ行ける? = 左記の区間に # # な並びがない
    #No
        #A→CとB→Dで通行可能 = 左記の区間に # # な並びがない

passing_point_set = set() #すれ違い場所の始点のset
imos_stop = list() # "#"が2連続している場所で増加する。
imos_stop.append(0)

for i in range(1,N-1):
    if S[i] == S[i+1] == "#":
        imos_stop.append(imos_stop[-1] + 1)
    else:
        imos_stop.append(imos_stop[-1])

    if S[i] == S[i+1] == S[i+2] == ".":
        passing_point_set.add(i)

i = N-1
if S[i] == S[i+1] == "#":
    imos_stop.append(imos_stop[-1] + 1)
else:
    imos_stop.append(imos_stop[-1])
#i = N
#右側はない。
imos_stop.append(imos_stop[-1]) #   .##.

#print(imos_stop)
#print(passing_point_set)

def is_reachable(start,goal):
    if imos_stop[start] == imos_stop[goal] and start <= goal: #右に1か2マスにジャンプさせる ∴右方向にしか進めない
        return True
    else:
        return False

if need_passing == True: #A < B < D < C が成立している
    for passing_point in passing_point_set:
        if ((is_reachable(A,passing_point) == True and is_reachable(passing_point,C) == True and is_reachable(B,passing_point) == True and is_reachable(passing_point,D) == True and D != passing_point) or
            (B-1 in passing_point_set and is_reachable(A,C) == True and is_reachable(B,D) == True)):
            #passing pointの範囲内にDがある場合、passingできない場合がある
            #ex.   A#..D#  …これはOK。A#.BD#.  として、追い抜かせてからB→D
            #ex.   A#.D.# …これはOK。ただし、.D.がpassing_pointになる
            #ex.   A#D..#  …NG
                #↓のパターンが考察不足だった
                #  ##AB.#D..#C#  …start <= goal条件により、追い越し不可扱いになるが実際はできる
                #  ##A.B#D..#C#  …これはNG
                #  ##A.B#.D.#C#  …これはOK。.D.がpassing_pointになる
                #  ##A.B.#D..#C# …これはOK
            
            print("Yes")
            break
    else:
        print("No")
else:
    if is_reachable(A,C) == True and is_reachable(B,D) == True:
        print("Yes")
    else:
        print("No")
        
         N,A,B,C,D = map(int, input().split()) N map(int, input().split()) map int input().split() ().split () input split A B C D S = [0] + list(input()) S [0] + list(input()) [0] 0 list(input()) list input() input if A < B < D < C:
    need_passing = True
elif (A < B < C < D) or (A < C < B < D):
    need_passing = False

#下記のように考える
#すれ違いが必要
    #Yes
        #すれ違い可能点(. . .)を列挙
        #A/B→すれ違い可能点へ行ける = 左記の区間に # # な並びがない
            #すれ違い可能点→C/Dへ行ける? = 左記の区間に # # な並びがない
    #No
        #A→CとB→Dで通行可能 = 左記の区間に # # な並びがない A < B < D < C A < B < D A < B A B D C need_passing = True need_passing True elif (A < B < C < D) or (A < C < B < D):
    need_passing = False

#下記のように考える
#すれ違いが必要
    #Yes
        #すれ違い可能点(. . .)を列挙
        #A/B→すれ違い可能点へ行ける = 左記の区間に # # な並びがない
            #すれ違い可能点→C/Dへ行ける? = 左記の区間に # # な並びがない
    #No
        #A→CとB→Dで通行可能 = 左記の区間に # # な並びがない (A < B < C < D) or (A < C < B < D) A < B < C < D A < B < C A < B A B C D A < C < B < D A < C < B A < C A C B D need_passing = False need_passing False passing_point_set = set() passing_point_set set() set imos_stop = list() imos_stop list() list imos_stop.append(0) imos_stop.append imos_stop append 0 for i in range(1,N-1):
    if S[i] == S[i+1] == "#":
        imos_stop.append(imos_stop[-1] + 1)
    else:
        imos_stop.append(imos_stop[-1])

    if S[i] == S[i+1] == S[i+2] == ".":
        passing_point_set.add(i) i range(1,N-1) range 1 N-1 N 1 if S[i] == S[i+1] == "#":
        imos_stop.append(imos_stop[-1] + 1)
    else:
        imos_stop.append(imos_stop[-1])

     S[i] == S[i+1] == "#" S[i] == S[i+1] S[i] S i S[i+1] S i+1 i 1 "#" imos_stop.append(imos_stop[-1] + 1) imos_stop.append imos_stop append imos_stop[-1] + 1 imos_stop[-1] imos_stop -1 1 imos_stop.append(imos_stop[-1]) imos_stop.append imos_stop append imos_stop[-1] imos_stop -1 if S[i] == S[i+1] == S[i+2] == ".":
        passing_point_set.add(i) S[i] == S[i+1] == S[i+2] == "." S[i] == S[i+1] == S[i+2] S[i] == S[i+1] S[i] S i S[i+1] S i+1 i 1 S[i+2] S i+2 i 2 "." passing_point_set.add(i) passing_point_set.add passing_point_set add i i = N-1 i N-1 N 1 if S[i] == S[i+1] == "#":
    imos_stop.append(imos_stop[-1] + 1)
else:
    imos_stop.append(imos_stop[-1])
#i = N
#右側はない。 S[i] == S[i+1] == "#" S[i] == S[i+1] S[i] S i S[i+1] S i+1 i 1 "#" imos_stop.append(imos_stop[-1] + 1) imos_stop.append imos_stop append imos_stop[-1] + 1 imos_stop[-1] imos_stop -1 1 imos_stop.append(imos_stop[-1]) imos_stop.append imos_stop append imos_stop[-1] imos_stop -1 imos_stop.append(imos_stop[-1]) imos_stop.append imos_stop append imos_stop[-1] imos_stop -1 def is_reachable(start,goal):
    if imos_stop[start] == imos_stop[goal] and start <= goal: #右に1か2マスにジャンプさせる ∴右方向にしか進めない
        return True
    else:
        return False is_reachable if imos_stop[start] == imos_stop[goal] and start <= goal: #右に1か2マスにジャンプさせる ∴右方向にしか進めない
        return True
    else:
        return False imos_stop[start] == imos_stop[goal] and start <= goal imos_stop[start] == imos_stop[goal] imos_stop[start] imos_stop start imos_stop[goal] imos_stop goal start <= goal start goal return True True return False False start start goal goal if need_passing == True: #A < B < D < C が成立している
    for passing_point in passing_point_set:
        if ((is_reachable(A,passing_point) == True and is_reachable(passing_point,C) == True and is_reachable(B,passing_point) == True and is_reachable(passing_point,D) == True and D != passing_point) or
            (B-1 in passing_point_set and is_reachable(A,C) == True and is_reachable(B,D) == True)):
            #passing pointの範囲内にDがある場合、passingできない場合がある
            #ex.   A#..D#  …これはOK。A#.BD#.  として、追い抜かせてからB→D
            #ex.   A#.D.# …これはOK。ただし、.D.がpassing_pointになる
            #ex.   A#D..#  …NG
                #↓のパターンが考察不足だった
                #  ##AB.#D..#C#  …start <= goal条件により、追い越し不可扱いになるが実際はできる
                #  ##A.B#D..#C#  …これはNG
                #  ##A.B#.D.#C#  …これはOK。.D.がpassing_pointになる
                #  ##A.B.#D..#C# …これはOK
            
            print("Yes")
            break
    else:
        print("No")
else:
    if is_reachable(A,C) == True and is_reachable(B,D) == True:
        print("Yes")
    else:
        print("No")
        
         need_passing == True need_passing True for passing_point in passing_point_set:
        if ((is_reachable(A,passing_point) == True and is_reachable(passing_point,C) == True and is_reachable(B,passing_point) == True and is_reachable(passing_point,D) == True and D != passing_point) or
            (B-1 in passing_point_set and is_reachable(A,C) == True and is_reachable(B,D) == True)):
            #passing pointの範囲内にDがある場合、passingできない場合がある
            #ex.   A#..D#  …これはOK。A#.BD#.  として、追い抜かせてからB→D
            #ex.   A#.D.# …これはOK。ただし、.D.がpassing_pointになる
            #ex.   A#D..#  …NG
                #↓のパターンが考察不足だった
                #  ##AB.#D..#C#  …start <= goal条件により、追い越し不可扱いになるが実際はできる
                #  ##A.B#D..#C#  …これはNG
                #  ##A.B#.D.#C#  …これはOK。.D.がpassing_pointになる
                #  ##A.B.#D..#C# …これはOK
            
            print("Yes")
            break
    else:
        print("No") passing_point passing_point_set if ((is_reachable(A,passing_point) == True and is_reachable(passing_point,C) == True and is_reachable(B,passing_point) == True and is_reachable(passing_point,D) == True and D != passing_point) or
            (B-1 in passing_point_set and is_reachable(A,C) == True and is_reachable(B,D) == True)):
            #passing pointの範囲内にDがある場合、passingできない場合がある
            #ex.   A#..D#  …これはOK。A#.BD#.  として、追い抜かせてからB→D
            #ex.   A#.D.# …これはOK。ただし、.D.がpassing_pointになる
            #ex.   A#D..#  …NG
                #↓のパターンが考察不足だった
                #  ##AB.#D..#C#  …start <= goal条件により、追い越し不可扱いになるが実際はできる
                #  ##A.B#D..#C#  …これはNG
                #  ##A.B#.D.#C#  …これはOK。.D.がpassing_pointになる
                #  ##A.B.#D..#C# …これはOK
            
            print("Yes")
            break
     (is_reachable(A,passing_point) == True and is_reachable(passing_point,C) == True and is_reachable(B,passing_point) == True and is_reachable(passing_point,D) == True and D != passing_point) or
            (B-1 in passing_point_set and is_reachable(A,C) == True and is_reachable(B,D) == True) is_reachable(A,passing_point) == True and is_reachable(passing_point,C) == True and is_reachable(B,passing_point) == True and is_reachable(passing_point,D) == True and D != passing_point is_reachable(A,passing_point) == True and is_reachable(passing_point,C) == True and is_reachable(B,passing_point) == True and is_reachable(passing_point,D) == True is_reachable(A,passing_point) == True and is_reachable(passing_point,C) == True and is_reachable(B,passing_point) == True is_reachable(A,passing_point) == True and is_reachable(passing_point,C) == True is_reachable(A,passing_point) == True is_reachable(A,passing_point) is_reachable A passing_point True is_reachable(passing_point,C) == True is_reachable(passing_point,C) is_reachable passing_point C True is_reachable(B,passing_point) == True is_reachable(B,passing_point) is_reachable B passing_point True is_reachable(passing_point,D) == True is_reachable(passing_point,D) is_reachable passing_point D True D != passing_point D passing_point B-1 in passing_point_set and is_reachable(A,C) == True and is_reachable(B,D) == True B-1 in passing_point_set and is_reachable(A,C) == True B-1 in passing_point_set B-1 B 1 passing_point_set is_reachable(A,C) == True is_reachable(A,C) is_reachable A C True is_reachable(B,D) == True is_reachable(B,D) is_reachable B D True print("Yes") print "Yes" break print("No") print "No" if is_reachable(A,C) == True and is_reachable(B,D) == True:
        print("Yes")
    else:
        print("No")
        
         is_reachable(A,C) == True and is_reachable(B,D) == True is_reachable(A,C) == True is_reachable(A,C) is_reachable A C True is_reachable(B,D) == True is_reachable(B,D) is_reachable B D True print("Yes") print "Yes" print("No") print "No" C,D = map(int, input().split()) map(int, input().split()) C D = map(int, input().split()) map(int, input().split()) D A,B,C,D = map(int, input().split()) map(int, input().split()) A S = [0] + list(input()) [0] + list(input()) S need_passing = False False need_passing i = N-1 N-1 i need_passing = True True need_passing def is_reachable(start,goal):
    if imos_stop[start] == imos_stop[goal] and start <= goal: #右に1か2マスにジャンプさせる ∴右方向にしか進めない
        return True
    else:
        return False def is_reachable(start,goal):
    if imos_stop[start] == imos_stop[goal] and start <= goal: #右に1か2マスにジャンプさせる ∴右方向にしか進めない
        return True
    else:
        return False is_reachable N,A,B,C,D = map(int, input().split()) map(int, input().split()) N passing_point_set = set() set() passing_point_set B,C,D = map(int, input().split()) map(int, input().split()) B imos_stop = list() list() imos_stop
##agc034_a
N,A,B,C,D = map(int, input().split()) #A→C、B→D #4≤N≤200,000
S = [0] + list(input())

#すれ違うには . の3連続が必要
#すれ違わなくても、#が2連続であるとアウト

#すれ違いが必要かを判定する
#  A<B
#  A<C
#  B<D
#を利用すると下記の3パターンしかない。
if A < B < D < C:
    need_passing = True
elif (A < B < C < D) or (A < C < B < D):
    need_passing = False

#下記のように考える
#すれ違いが必要
    #Yes
        #すれ違い可能点(. . .)を列挙
        #A/B→すれ違い可能点へ行ける = 左記の区間に # # な並びがない
            #すれ違い可能点→C/Dへ行ける? = 左記の区間に # # な並びがない
    #No
        #A→CとB→Dで通行可能 = 左記の区間に # # な並びがない

passing_point_set = set() #すれ違い場所の始点のset
imos_stop = list() # "#"が2連続している場所で増加する。
imos_stop.append(0)

for i in range(1,N-1):
    if S[i] == S[i+1] == "#":
        imos_stop.append(imos_stop[-1] + 1)
    else:
        imos_stop.append(imos_stop[-1])

    if S[i] == S[i+1] == S[i+2] == ".":
        passing_point_set.add(i)

i = N-1
if S[i] == S[i+1] == "#":
    imos_stop.append(imos_stop[-1] + 1)
else:
    imos_stop.append(imos_stop[-1])
#i = N
#右側はない。
imos_stop.append(imos_stop[-1]) #   .##.

#print(imos_stop)
#print(passing_point_set)

def is_reachable(start,goal):
    if imos_stop[start] == imos_stop[goal] and start <= goal: #右に1か2マスにジャンプさせる ∴右方向にしか進めない
        return True
    else:
        return False

if need_passing == True: #A < B < D < C が成立している
    for passing_point in passing_point_set:
        if ((is_reachable(A,passing_point) == True and is_reachable(passing_point,C) == True and is_reachable(B,passing_point) == True and is_reachable(passing_point,D) == True and D != passing_point) or
            (B-1 in passing_point_set and is_reachable(A,C) == True and is_reachable(B,D) == True)):
            #passing pointの範囲内にDがある場合、passingできない場合がある
            #ex.   A#..D#  …これはOK。A#.BD#.  として、追い抜かせてからB→D
            #ex.   A#.D.# …これはOK。ただし、.D.がpassing_pointになる
            #ex.   A#D..#  …NG
                #↓のパターンが考察不足だった
                #  ##AB.#D..#C#  …start <= goal条件により、追い越し不可扱いになるが実際はできる
                #  ##A.B#D..#C#  …これはNG
                #  ##A.B#.D.#C#  …これはOK。.D.がpassing_pointになる
                #  ##A.B.#D..#C# …これはOK
            
            print("Yes")
            break
    else:
        print("No")
else:
    if is_reachable(A,C) == True and is_reachable(B,D) == True:
        print("Yes")
    else:
        print("No")
        
        
