#58 A - Kenken Race
import sys
sys.setrecursionlimit(10**7)
N,A,B,C,D = map(int,input().split())
S = input()
A,B,C,D = A-1,B-1,C-1,D-1

# A が B を抜かせるエリア
if B == 1:
    a = S.find('...') + 1
else:
    a = S.find('...',3) + 1

dx = [1,2]

# 先に移動させる方の関数
def dfs_ini(v,seen_ini,X):
    seen_ini[v] = True# v を訪問済みにする
    for i in range(2):
        next_v = v + dx[i]
        # next_v が範囲外 or 壁の場合 or 他方が存在する場合
        if not(-1<next_v<N):
            continue
        if (S[next_v] == '#') or (next_v == X):
            continue
        if seen_ini[next_v] == True:# next_v が探索済みならスルー
            continue
        dfs_ini(next_v,seen_ini,X)

# 後に移動させる方の関数
def dfs_fin(w,seen_fin,Y):
    seen_fin[w] = True# w を訪問済みにする
    for j in range(2):
        next_w = w + dx[j]
        # next_w が範囲外 or 壁の場合 or 他方が存在する場合
        if not(-1<next_w<N):
             continue
        if (S[next_w] == '#')  or (next_w == Y):
             continue
        if seen_fin[next_w] == True:# next_w が探索済みならスルー
             continue
        dfs_fin(next_w,seen_fin,Y)

# A を先に動かした方がいいとき
# B を 先に a まで移動させる
if C>D:
    seen_ini_A = [False]*N
    seen_fin_B = [False]*N
    # B を抜かせるエリアがないとき、B の位置はスタート位置
    if (a < B) or (a > D):
        a = B
    dfs_ini(A,seen_ini_A,a)
    dfs_fin(B,seen_fin_B,C)
    result = 'No'
    if seen_ini_A[C] and seen_fin_B[D]:
        result = 'Yes'

# B を先に動かした方がいいとき
else:
    seen_ini_B = [False]*N
    seen_fin_A = [False]*N
    dfs_ini(B,seen_ini_B,A)
    dfs_fin(A,seen_fin_A,D)
    result = 'No'
    if seen_ini_B[D] and seen_fin_A[C]:
        result = 'Yes'

print(result) import sys sys sys.setrecursionlimit(10**7) sys.setrecursionlimit sys setrecursionlimit 10**7 10 7 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 = input() S input() input A,B,C,D = A-1,B-1,C-1,D-1 A A-1 A 1 B B-1 B 1 C C-1 C 1 D D-1 D 1 if B == 1:
    a = S.find('...') + 1
else:
    a = S.find('...',3) + 1 B == 1 B 1 a = S.find('...') + 1 a S.find('...') + 1 S.find('...') S.find S find '...' 1 a = S.find('...',3) + 1 a S.find('...',3) + 1 S.find('...',3) S.find S find '...' 3 1 dx = [1,2] dx [1,2] 1 2 def dfs_ini(v,seen_ini,X):
    seen_ini[v] = True# v を訪問済みにする
    for i in range(2):
        next_v = v + dx[i]
        # next_v が範囲外 or 壁の場合 or 他方が存在する場合
        if not(-1<next_v<N):
            continue
        if (S[next_v] == '#') or (next_v == X):
            continue
        if seen_ini[next_v] == True:# next_v が探索済みならスルー
            continue
        dfs_ini(next_v,seen_ini,X)

# 後に移動させる方の関数 dfs_ini seen_ini[v] = True seen_ini[v] seen_ini v True for i in range(2):
        next_v = v + dx[i]
        # next_v が範囲外 or 壁の場合 or 他方が存在する場合
        if not(-1<next_v<N):
            continue
        if (S[next_v] == '#') or (next_v == X):
            continue
        if seen_ini[next_v] == True:# next_v が探索済みならスルー
            continue
        dfs_ini(next_v,seen_ini,X)

# 後に移動させる方の関数 i range(2) range 2 next_v = v + dx[i] next_v v + dx[i] v dx[i] dx i if not(-1<next_v<N):
            continue
         not(-1<next_v<N) -1<next_v<N -1<next_v -1 next_v N continue if (S[next_v] == '#') or (next_v == X):
            continue
         (S[next_v] == '#') or (next_v == X) S[next_v] == '#' S[next_v] S next_v '#' next_v == X next_v X continue if seen_ini[next_v] == True:# next_v が探索済みならスルー
            continue
         seen_ini[next_v] == True seen_ini[next_v] seen_ini next_v True continue dfs_ini(next_v,seen_ini,X) dfs_ini next_v seen_ini X v v seen_ini seen_ini X X def dfs_fin(w,seen_fin,Y):
    seen_fin[w] = True# w を訪問済みにする
    for j in range(2):
        next_w = w + dx[j]
        # next_w が範囲外 or 壁の場合 or 他方が存在する場合
        if not(-1<next_w<N):
             continue
        if (S[next_w] == '#')  or (next_w == Y):
             continue
        if seen_fin[next_w] == True:# next_w が探索済みならスルー
             continue
        dfs_fin(next_w,seen_fin,Y)

# A を先に動かした方がいいとき
# B を 先に a まで移動させる dfs_fin seen_fin[w] = True seen_fin[w] seen_fin w True for j in range(2):
        next_w = w + dx[j]
        # next_w が範囲外 or 壁の場合 or 他方が存在する場合
        if not(-1<next_w<N):
             continue
        if (S[next_w] == '#')  or (next_w == Y):
             continue
        if seen_fin[next_w] == True:# next_w が探索済みならスルー
             continue
        dfs_fin(next_w,seen_fin,Y)

# A を先に動かした方がいいとき
# B を 先に a まで移動させる j range(2) range 2 next_w = w + dx[j] next_w w + dx[j] w dx[j] dx j if not(-1<next_w<N):
             continue
         not(-1<next_w<N) -1<next_w<N -1<next_w -1 next_w N continue if (S[next_w] == '#')  or (next_w == Y):
             continue
         (S[next_w] == '#')  or (next_w == Y) S[next_w] == '#' S[next_w] S next_w '#' next_w == Y next_w Y continue if seen_fin[next_w] == True:# next_w が探索済みならスルー
             continue
         seen_fin[next_w] == True seen_fin[next_w] seen_fin next_w True continue dfs_fin(next_w,seen_fin,Y) dfs_fin next_w seen_fin Y w w seen_fin seen_fin Y Y if C>D:
    seen_ini_A = [False]*N
    seen_fin_B = [False]*N
    # B を抜かせるエリアがないとき、B の位置はスタート位置
    if (a < B) or (a > D):
        a = B
    dfs_ini(A,seen_ini_A,a)
    dfs_fin(B,seen_fin_B,C)
    result = 'No'
    if seen_ini_A[C] and seen_fin_B[D]:
        result = 'Yes'

# B を先に動かした方がいいとき
else:
    seen_ini_B = [False]*N
    seen_fin_A = [False]*N
    dfs_ini(B,seen_ini_B,A)
    dfs_fin(A,seen_fin_A,D)
    result = 'No'
    if seen_ini_B[D] and seen_fin_A[C]:
        result = 'Yes' C>D C D seen_ini_A = [False]*N seen_ini_A [False]*N [False] False N seen_fin_B = [False]*N seen_fin_B [False]*N [False] False N if (a < B) or (a > D):
        a = B
     (a < B) or (a > D) a < B a B a > D a D a = B a B dfs_ini(A,seen_ini_A,a) dfs_ini A seen_ini_A a dfs_fin(B,seen_fin_B,C) dfs_fin B seen_fin_B C result = 'No' result 'No' if seen_ini_A[C] and seen_fin_B[D]:
        result = 'Yes'

# B を先に動かした方がいいとき seen_ini_A[C] and seen_fin_B[D] seen_ini_A[C] seen_ini_A C seen_fin_B[D] seen_fin_B D result = 'Yes' result 'Yes' seen_ini_B = [False]*N seen_ini_B [False]*N [False] False N seen_fin_A = [False]*N seen_fin_A [False]*N [False] False N dfs_ini(B,seen_ini_B,A) dfs_ini B seen_ini_B A dfs_fin(A,seen_fin_A,D) dfs_fin A seen_fin_A D result = 'No' result 'No' if seen_ini_B[D] and seen_fin_A[C]:
        result = 'Yes' seen_ini_B[D] and seen_fin_A[C] seen_ini_B[D] seen_ini_B D seen_fin_A[C] seen_fin_A C result = 'Yes' result 'Yes' print(result) print result S = input() input() S seen_ini_A = [False]*N [False]*N seen_ini_A A,B,C,D = map(int,input().split()) map(int,input().split()) A def dfs_fin(w,seen_fin,Y):
    seen_fin[w] = True# w を訪問済みにする
    for j in range(2):
        next_w = w + dx[j]
        # next_w が範囲外 or 壁の場合 or 他方が存在する場合
        if not(-1<next_w<N):
             continue
        if (S[next_w] == '#')  or (next_w == Y):
             continue
        if seen_fin[next_w] == True:# next_w が探索済みならスルー
             continue
        dfs_fin(next_w,seen_fin,Y)

# A を先に動かした方がいいとき
# B を 先に a まで移動させる def dfs_fin(w,seen_fin,Y):
    seen_fin[w] = True# w を訪問済みにする
    for j in range(2):
        next_w = w + dx[j]
        # next_w が範囲外 or 壁の場合 or 他方が存在する場合
        if not(-1<next_w<N):
             continue
        if (S[next_w] == '#')  or (next_w == Y):
             continue
        if seen_fin[next_w] == True:# next_w が探索済みならスルー
             continue
        dfs_fin(next_w,seen_fin,Y)

# A を先に動かした方がいいとき
# B を 先に a まで移動させる dfs_fin a = B B a C,D = map(int,input().split()) map(int,input().split()) C seen_fin_B = [False]*N [False]*N seen_fin_B N,A,B,C,D = map(int,input().split()) map(int,input().split()) N a = S.find('...') + 1 S.find('...') + 1 a B,C,D = A-1,B-1,C-1,D-1 B-1 B result = 'No' 'No' result result = 'No' 'No' result seen_fin_A = [False]*N [False]*N seen_fin_A result = 'Yes' 'Yes' result result = 'Yes' 'Yes' result D = A-1,B-1,C-1,D-1 D-1 D D = map(int,input().split()) map(int,input().split()) D C,D = A-1,B-1,C-1,D-1 C-1 C B,C,D = map(int,input().split()) map(int,input().split()) B seen_ini_B = [False]*N [False]*N seen_ini_B A,B,C,D = A-1,B-1,C-1,D-1 A-1 A dx = [1,2] [1,2] dx def dfs_ini(v,seen_ini,X):
    seen_ini[v] = True# v を訪問済みにする
    for i in range(2):
        next_v = v + dx[i]
        # next_v が範囲外 or 壁の場合 or 他方が存在する場合
        if not(-1<next_v<N):
            continue
        if (S[next_v] == '#') or (next_v == X):
            continue
        if seen_ini[next_v] == True:# next_v が探索済みならスルー
            continue
        dfs_ini(next_v,seen_ini,X)

# 後に移動させる方の関数 def dfs_ini(v,seen_ini,X):
    seen_ini[v] = True# v を訪問済みにする
    for i in range(2):
        next_v = v + dx[i]
        # next_v が範囲外 or 壁の場合 or 他方が存在する場合
        if not(-1<next_v<N):
            continue
        if (S[next_v] == '#') or (next_v == X):
            continue
        if seen_ini[next_v] == True:# next_v が探索済みならスルー
            continue
        dfs_ini(next_v,seen_ini,X)

# 後に移動させる方の関数 dfs_ini a = S.find('...',3) + 1 S.find('...',3) + 1 a
#58 A - Kenken Race
import sys
sys.setrecursionlimit(10**7)
N,A,B,C,D = map(int,input().split())
S = input()
A,B,C,D = A-1,B-1,C-1,D-1

# A が B を抜かせるエリア
if B == 1:
    a = S.find('...') + 1
else:
    a = S.find('...',3) + 1

dx = [1,2]

# 先に移動させる方の関数
def dfs_ini(v,seen_ini,X):
    seen_ini[v] = True# v を訪問済みにする
    for i in range(2):
        next_v = v + dx[i]
        # next_v が範囲外 or 壁の場合 or 他方が存在する場合
        if not(-1<next_v<N):
            continue
        if (S[next_v] == '#') or (next_v == X):
            continue
        if seen_ini[next_v] == True:# next_v が探索済みならスルー
            continue
        dfs_ini(next_v,seen_ini,X)

# 後に移動させる方の関数
def dfs_fin(w,seen_fin,Y):
    seen_fin[w] = True# w を訪問済みにする
    for j in range(2):
        next_w = w + dx[j]
        # next_w が範囲外 or 壁の場合 or 他方が存在する場合
        if not(-1<next_w<N):
             continue
        if (S[next_w] == '#')  or (next_w == Y):
             continue
        if seen_fin[next_w] == True:# next_w が探索済みならスルー
             continue
        dfs_fin(next_w,seen_fin,Y)

# A を先に動かした方がいいとき
# B を 先に a まで移動させる
if C>D:
    seen_ini_A = [False]*N
    seen_fin_B = [False]*N
    # B を抜かせるエリアがないとき、B の位置はスタート位置
    if (a < B) or (a > D):
        a = B
    dfs_ini(A,seen_ini_A,a)
    dfs_fin(B,seen_fin_B,C)
    result = 'No'
    if seen_ini_A[C] and seen_fin_B[D]:
        result = 'Yes'

# B を先に動かした方がいいとき
else:
    seen_ini_B = [False]*N
    seen_fin_A = [False]*N
    dfs_ini(B,seen_ini_B,A)
    dfs_fin(A,seen_fin_A,D)
    result = 'No'
    if seen_ini_B[D] and seen_fin_A[C]:
        result = 'Yes'

print(result)