Source Code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
import java.util.TreeMap;
import java.util.TreeSet;

public class Codeforces {

    static FastReader input = new FastReader();
    static final int INF = (int) 1e9 + 20;
    static long xe, ye, d;
    
    public static void main(String[] args) throws NumberFormatException, IOException {
        int t = input.nextInt();
        for(int z=0; z<t; z++){
            int n = input.nextInt();
            String a = input.next();
            String b = input.next();
            char[] arrA = a.toCharArray();
            char[] arrB = b.toCharArray();
            boolean valid = true;
            int i = 0; int j=0;
            while(i<a.length() && j<b.length()){
                if(arrA[i] == arrB[j]){
                    i++;
                    j++;
                }
                else if((arrA[i] -'0')%2 == 0 && arrB[j] == '.' && i+1 < a.length()){
                    swap(arrA, i, i+1);
                }
                else if(arrA[i] == '.' && (arrB[j]-'0')%2 == 1 && j+1 < b.length()){
                    swap(arrB, j, j+1);
                }
                else{
                    valid = false;
                    break;
                }
            }
            if(!valid){
                System.out.println("no");
            }
            else{
                System.out.println("yes");
            }
        }
    }
    public static void swap(char[] arr, int i, int j){
        char temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
    
    static class FastReader {
 
        BufferedReader br;
        StringTokenizer st;
 
        public FastReader() {
            /*try {
             br = new BufferedReader(new FileReader(new File("travel_restrictions_validation_input.txt")));
             } catch (FileNotFoundException e) {
             e.printStackTrace();
             }*/
            br = new BufferedReader(new InputStreamReader(System.in));
        }
 
        String next() throws IOException {
            while (st == null || !st.hasMoreElements()) {
                st = new StringTokenizer(br.readLine());
            }
            return st.nextToken();
        }
 
        int nextInt() throws NumberFormatException, IOException {
            return Integer.parseInt(next());
        }
 
        long nextLong() throws NumberFormatException, IOException {
            return Long.parseLong(next());
        }
 
        double nextDouble() throws NumberFormatException, IOException {
            return Double.parseDouble(next());
        }
 
        String nextLine() throws IOException {
            String str = "";
            str = br.readLine();
            return str;
        }
 
        boolean hasNext() throws IOException {
            return br.ready();
        }
    }
}
Copy
Moving Digits Catwoman
Java 11
1535 ms
13.4 MB
Time Limit Exceeded