#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define endl '\n'
#define rep(i, a, b) for (int i = a; i < b; i++)
#define ff first
#define pii pair<int, int>
#define vii vector< pair<int,int> >
#define vi vector<int>
#define vvi vector< vector< int> >
#define vs vector<string>
#define ss second
#define pb push_back
#define mp make_pair
#define int long long
#define all(a) a.begin(), a.end()
#define inf (1LL<<61)
#define ull unsigned long long
#define trace1(x)                cout<<#x<<": "<<x<<endl
#define trace2(x, y)             cout<<#x<<": "<<x<<" | "<<#y<<": "<<y<<endl
#define trace4(x, y, z, d)          cout<<#x<<":" <<x<<" | "<<#y<<": "<<y<<" | "<<#z<<": "<<z<<" | "<<#d<<": "<<d<<endl
#define trace3(x, y, z)          cout<<#x<<":" <<x<<" | "<<#y<<": "<<y<<" | "<<#z<<": "<<z<<endl
#define debug1(x) cerr << #x << ": " << x <<'\n'
#define debug2(x, y) cerr << #x << ": " << x << '\t' << #y << ": " << y <<'\n'
#define debug3(x, y, z) cerr << #x << ": " << x << '\t' << #y << ": " << y << '\t' << #z << ": " << z <<'\n'
using namespace std;
int dx[]={1,0,-1, 0};int dy[]={0,1,0, -1}; //4 Direction
//int dx[]={1,1,0,-1,-1,-1,0,1};int dy[]={0,1,1,1,0,-1,-1,-1};//8 direction
bool compare(const pair<pair<string,int>, int> &a,const pair<pair<string,int>, int> &b)
{
    if(a.ff.ff == b.ff.ff) {
        return (a.ff.ss > b.ff.ss);
    }
    return (a.ff.ff<b.ff.ff);
}
int min(int a, int b){
    if(a<b){
        return a;
    }
    else{
        return b;
    }
}
int max(int a, int b){
    if(a>b){
        return a;
    }
    else{
        return b;
    }
}
int poww(int a, int b)
{
    int res = 1;
    for(int i = 1; i<=b; ++i)
        res *= a;

    return res;
}
int findlcm(int arr[], int n) 
{ 
    // Initialize result 
    int ans = arr[0]; 
  
    // ans contains LCM of arr[0], ..arr[i] 
    // after i'th iteration, 
    for (int i = 1; i < n; i++) 
        ans = (((arr[i] * ans)) / 
                (__gcd(arr[i], ans))); 
  
    return ans; 
}
bool prime[100001];
void SieveOfEratosthenes(int n) 
{
    memset(prime, true, sizeof(prime));

    for (int p=2; p*p<=n; p++)
    {
        if (prime[p] == true)
        {
            for (int i=p*p; i<=n; i += p)
                prime[i] = false;
        }
  }
}

//Define mx for maximum range and MOD for large numbers
#define mx 200005
#define MOD 1000000007;
// Declare all the variables and global functions here - 
int n,a,b,c,d;
string s;
int32_t main(){
    IOS;
    cin >> n >> a >> b >> c >> d;
    cin >> s;
    a--;
    b--;
    c--;
    d--;
    int i = b;
    bool f = true;
    while( true){
        if(i+1 == d||i+2 == d ){
            break;
        }

        if(s[i+1]=='#' &&s[i+2] == '#'){
            f = false;
            break;
        }
        else if(s[i+1] == '#'){
            i = i+2;
        }
        else if(s[i+2]=='#'){i++;}
        else{
            i++;
        }

    }

    i = a;
    bool sn = true;
    while( true){
        if(i+1 == c||i+2 == c ){
            break;
        }

        if(s[i+1] == '#' &&s[i+2] == '#'){
            sn = false;
            break;
        }
        else if(s[i+1] == '#'){
            i = i+2;
        }
        else if(s[i+2]=='#'){i++;}
        else{
            i++;
        }

    }
    //cerr << "Yo" << endl;
    if(c < d){
        if(sn && f){
            cout << "Yes" << endl;
            return 0;
        }
        else{
            cout << "No" << endl;
            return 0;
        }
    }
    

    i = a;
    int j = b;
    f = true;
    sn = true;
    while(true){
        if(i+1==c || i+2 == c){
            break;
        }

        if(j == d){
            f = true;
        }

        if(s[i+1]=='#' && s[i+2]=='#'){
            sn = false;
            break;
        }
        else if(s[i+1] =='#' && i+2 == j){
            if(s[j+1] == '.'){
                j++;
            }
            else if(s[j+2] == '.'){
                j += 2;
            }
            else{
                sn = false;
                break;
            }
            i = i+2;
        }
        else if(s[i+2] =='#' && i+1 == j){
            if(s[j+1] == '.'){
                j++;
            }
            else if(s[j+2] == '.'){
                j += 2;
            }
            else{
                sn = false;
                break;
            }
            i = i+1;
        }
        else if(s[i+1] == '.'){
            i++;
        }

        else if(s[i+2] == '.'){
            i = i+2;
        }
    }

    if(j > d){
        cout << "No" << endl;
        return 0;
    }

    i = b;
    f = true;
    while( true){
        if(i+1 == d||i+2 == d ){
            break;
        }

        if(s[i+1]=='#' &&s[i+2] == '#'){
            f = false;
            break;
        }
        else if(s[i+1] == '#'){
            i = i+2;
        }
        else if(s[i+2]=='#'){i++;}
        else{
            i++;
        }

    }

     if(sn && f){
            cout << "Yes" << endl;
            return 0;
        }
        else{
            cout << "No" << endl;
            return 0;
        }



}

Measured memory_bytes: 592