There are N squares arranged in a row, numbered 1, 2, ..., N from left to right. You are given a string S of length N consisting of `.` and `#`. If the i-th character of S is `#`, Square i contains a rock; if the i-th character of S is `.`, Square i is empty.

In the beginning, Snuke stands on Square A, and Fnuke stands on Square B.

You can repeat the following operation any number of times:

* Choose Snuke or Fnuke, and make him jump one or two squares to the right. The destination must be one of the squares, and it must not contain a rock or the other person.



You want to repeat this operation so that Snuke will stand on Square C and Fnuke will stand on Square D.

Determine whether this is possible.

Constraints

* 4 \leq N \leq 200\ 000
* S is a string of length N consisting of `.` and `#`.
* 1 \leq A, B, C, D \leq N
* Square A, B, C and D do not contain a rock.
* A, B, C and D are all different.
* A < B
* A < C
* B < D

Input

Input is given from Standard Input in the following format:


N A B C D
S


Output

Print `Yes` if the objective is achievable, and `No` if it is not.

Examples

Input

7 1 3 6 7
.#..#..


Output

Yes


Input

7 1 3 7 6
.#..#..


Output

No


Input

15 1 3 15 13
...#.#...#.#...


Output

Yes
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter out = new PrintWriter(System.out);
        String[] arr = br.readLine().split(" ");
        int N = Integer.parseInt(arr[0]);
        int A = Integer.parseInt(arr[1]) - 1;
        int B = Integer.parseInt(arr[2]) - 1;
        int C = Integer.parseInt(arr[3]) - 1;
        int D = Integer.parseInt(arr[4]) - 1;
        String S = br.readLine();
        String ans = "Yes";
        String reg1 = "#{2}";
        String reg2 = "\\.{3}";
        Pattern p1 = Pattern.compile(reg1);
        Pattern p2 = Pattern.compile(reg2);

        if (C < D) {
            String routeA = S.substring(A + 1, C);
            String routeB = S.substring(B + 1, D);
            Matcher ma = p1.matcher(routeA);
            Matcher mb = p1.matcher(routeB);
            if (ma.find() || mb.find()) {
                ans = "No";
            } 
        } else {
            int pStart = 0;
            int pEnd = D + 2;
            if (B - A == 1) {
                pStart = A;
            } else {
                pStart = B - 1;
            }
            String routeA = S.substring(A + 1, C);
            String routeB = S.substring(B + 1, D);
            String routeAPrime = S.substring(pStart, pEnd);
            Matcher ma = p1.matcher(routeA);
            Matcher mb = p1.matcher(routeB);
            Matcher maPrime = p2.matcher(routeAPrime);
            if (ma.find() || mb.find() || !maPrime.find() ) {
                ans = "No";
            } 
         }

        out.println(ans);
        out.close();
    }
}
