Problem: We all know that a superhero can transform to certain other superheroes. But not all Superheroes can transform to any other superhero. A superhero with name s can transform to another superhero with name t if s can be made equal to t by changing any vowel in s to any other vowel and any consonant in s to any other consonant. Multiple changes can be made.

In this problem, we consider the letters 'a', 'e', 'i', 'o' and 'u' to be vowels and all the other letters to be consonants.

Given the names of two superheroes, determine if the superhero with name s can be transformed to the Superhero with name t.

Input

The first line contains the string s having length between 1 and 1000, inclusive.

The second line contains the string t having length between 1 and 1000, inclusive.

Both strings s and t are guaranteed to be different and consist of lowercase English letters only.

Output

Output "Yes" (without quotes) if the superhero with name s can be transformed to the superhero with name t and "No" (without quotes) otherwise.

You can print each letter in any case (upper or lower).

Examples

Input


a
u


Output


Yes


Input


abc
ukm


Output


Yes


Input


akm
ua


Output


No

Note

In the first sample, since both 'a' and 'u' are vowels, it is possible to convert string s to t.

In the third sample, 'k' is a consonant, whereas 'a' is a vowel, so it is not possible to convert string s to t.

Solution (in JAVA):

Solution:
//package sept;

import java.io.*;
import java.util.*;



public class TimePass implements Runnable {
    InputStream is;
    PrintWriter out;
    String INPUT = "10 6\r\n" + 
    		"2 3 3 3 4 4 4 5 5 6";
    //boolean debug=false;
    boolean debug=true;
    static long mod=998244353;
    static long mod2=1000000007;
    
    void solve() throws IOException
	{
    	/*
    	int n=ni(),x=ni();
    	int[] a=na(n);
    	int[] from=new int[2*(n-1)];
    	int[] to=new int[2*(n-1)];
    	int ind=0;
    	for(int i=0;i<n-1;i++)
    	{
    		int u=ni()-1,v=ni()-1;
    		from[ind++]=u;
    		to[ind-1]=v;
    		from[ind++]=v;
    		to[ind-1]=u;
    	}
    	int[][] g=packD(n,from,to);
    	xor=new int[n];
    	int[] vis=new int[n];
    	dfs(0,a,g,vis);
    	if(xor[0]!=0 && xor[0]!=x)
    	{
    		out.println(0);
    		return;
    	}
    	*/
    	/*
    	int q=ni();
    	int[] a=na(q);
    	for(int i=0;i<q;i++)
    	{
    		for(int j=1;j<=Math.sqrt(a[i]);j++)
    		{
    			if(a[i]%j==0)
    			{
    				
    				if(a[i]%(a[i]/j)==0 && j!=a[i]/j)
    				{
    					
    				}
    			}
    		}
    	}
    	
    	for(int bit=2;bit<=10;bit++)
    	{
    		for(int root=0;root<1;root++)
    		{
    			for(int curr_xor=0;curr_xor<2;curr_xor++)
    			{
    				int tot=0;
    				int[] next_perm_xor_cnt=new int[(1<<bit)];
    				for(int next_perm_xor=0;next_perm_xor<(1<<bit);next_perm_xor++)
    				{
    					int curr_next_xor=(curr_xor^next_perm_xor);
    					int no_of_change=0;
    					while(curr_next_xor!=0)
    					{
    						if(curr_next_xor%2==1)no_of_change++;
    						curr_next_xor/=2;
    					}
    					for(int breaks=0;breaks<(1<<bit);breaks++)
    					{
    						int and=(breaks & next_perm_xor);
    						int no_of_breaks=0;
    						while(and!=0)
    						{
    							if(and%2==1)no_of_breaks++;
    							and/=2;
    						}
    						if((no_of_change+no_of_breaks)%2==0)
    						{
    							if(root==1 && next_perm_xor>=breaks)
    							{
    								next_perm_xor_cnt[next_perm_xor]++;
    								tot++;
    							}
    						}
    						else
    						{
    							if(root==0 && next_perm_xor>=breaks)
    							{
    								next_perm_xor_cnt[next_perm_xor]++;
    								//out.println(next_perm_xor+" "+breaks);
    								tot++;
    							}
    						}
    					}
    				}
    				//for(int i=0;i<(1<<bit);i++)
    				//{
    					//out.println(i+" "+next_perm_xor_cnt[i]);
    				//}
    				out.println(bit+" "+root+" "+curr_xor+" "+tot);
    			}
    		}
    	}
    	*/
    	char[] a=ns().toCharArray();
    	char[] b=ns().toCharArray();
    	if(a.length!=b.length)
    	{
    		out.println("No");
    		return;
    	}
    	int n=a.length;
    	HashSet<Character> set=new HashSet<>();
    	set.add('a');set.add('e');set.add('i');
    	set.add('o');set.add('u');
    	int ch=1;
    	for(int i=0;i<n;i++)
    	{
    		if(set.contains(a[i]) && !set.contains(b[i]))
    		{
    			ch=0;
    			break;
    		}
    		if(!set.contains(a[i]) && set.contains(b[i]))
    		{
    			ch=0;
    			break;
    		}
    	}
    	if(ch==1)
    	{
    		out.println("Yes");
    	}
    	else out.println("No");
	}
    
    static int[] xor;
    
    static void dfs(int u,int[] a,int[][] g,int[] vis)
    {
    	xor[u]=a[u];
    	
    	vis[u]=1;
    	for(int v:g[u])
    	{
    		if(vis[v]==0)
    		{
    			dfs(v,a,g,vis);
    			xor[u]=xor[u]^xor[v];
    		}
    	}
    }

	static int[][] packD(int n,int[] from,int[] to)
	{
		int[][] g=new int[n][];
		int[] p=new int[n];
		for(int f:from)
		{
			p[f]++;
		}
		int m=from.length;
		for(int i=0;i<n;i++)
		{
			g[i]=new int[p[i]];
		}
		for(int i=0;i<m;i++)
		{
			g[from[i]][--p[from[i]]]=to[i];
		}
		return g;
	}
	    
    static class Pair
    {
        int a,b;
        public Pair(int a,int b)
        {
            this.a=a;
            this.b=b;
            //this.ind=ind;
        }
    }
    
    static long lcm(int a,int b)
    {
        long val=a;
        val*=b;
        return (val/gcd(a,b));
    }
    
    static long gcd(long a,long b)
    {
        if(a==0)return b;
        return gcd(b%a,a);
    }
    
    static int pow(int a, int b, int p)
    {
        long ans = 1, base = a;
        while (b!=0)
        {
            if ((b & 1)!=0)
            {
                ans *= base;
                ans%= p;
            }
            base *= base;
            base%= p;
            b >>= 1;
        }
        return (int)ans;
    }

    static int inv(int x, int p)
    {
        return pow(x, p - 2, p);
    }
    
    public void run()
    {
        if(debug)oj=true;
        is = oj ? System.in : new ByteArrayInputStream(INPUT.getBytes());
        out = new PrintWriter(System.out);
        
        long s = System.currentTimeMillis();
        try {
			solve();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        out.flush();
        tr(System.currentTimeMillis()-s+"ms");
    }
    
    public static void main(String[] args) throws Exception {new Thread(null,new TimePass(),"Main",1<<26).start();}
    
    private byte[] inbuf = new byte[1024];
    public int lenbuf = 0, ptrbuf = 0;
    
    private int readByte()
    {
        if(lenbuf == -1)throw new InputMismatchException();
        if(ptrbuf >= lenbuf){
            ptrbuf = 0;
            try { lenbuf = is.read(inbuf); } catch (IOException e) { throw new InputMismatchException(); }
            if(lenbuf <= 0)return -1;
        }
        return inbuf[ptrbuf++];
    }
    
    private boolean isSpaceChar(int c) { return !(c >= 33 && c <= 126); }
    private int skip() { int b; while((b = readByte()) != -1 && isSpaceChar(b)); return b; }
    
    private double nd() { return Double.parseDouble(ns()); }
    private char nc() { return (char)skip(); }
    
    private String ns()
    {
        int b = skip();
        StringBuilder sb = new StringBuilder();
        while(!(isSpaceChar(b))){ // when nextLine, (isSpaceChar(b) && b != ' ')
            sb.appendCodePoint(b);
            b = readByte();
        }
        return sb.toString();
    }
    
    private char[] ns(int n)
    {
        char[] buf = new char[n];
        int b = skip(), p = 0;
        while(p < n && !(isSpaceChar(b))){
            buf[p++] = (char)b;
            b = readByte();
        }
        return n == p ? buf : Arrays.copyOf(buf, p);
    }
    
    private char[][] nm(int n, int m)
    {
        char[][] map = new char[n][];
        for(int i = 0;i < n;i++)map[i] = ns(m);
        return map;
    }
    
    private int[] na(int n)
    {
        int[] a = new int[n];
        for(int i = 0;i < n;i++)a[i] = ni();
        return a;
    }
    
    private int ni()
    {
        int num = 0, b;
        boolean minus = false;
        while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
        if(b == '-'){
            minus = true;
            b = readByte();
        }
        
        while(true){
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        }
    }
    
    private long nl()
    {
        long num = 0;
        int b;
        boolean minus = false;
        while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
        if(b == '-'){
            minus = true;
            b = readByte();
        }
        
        while(true){
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        }
    }
    
    private boolean oj = System.getProperty("ONLINE_JUDGE") != null;
    private void tr(Object... o) { if(!oj)System.out.println(Arrays.deepToString(o)); }
}