RT
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<memory.h>
#include<queue>
using namespace std;
int i,n,idx,k,m,l,o,p;
int h[500005],e[500005],ne[500005];
int depth[500005],fa[500005][20]={{0}};
void add(int x,int y)
{
e[idx]=y;
ne[idx]=h[x];
h[x]=idx++;
}
void bfs(int root)
{
memset(depth,0x3f3f3f3f,sizeof(depth));
depth[root]=1;
depth[0]=0;
queue<int> q;
q.push(root);
while(q.size())
{
int t=q.front();
q.pop();
for(i=h[t];i!=-1;i=ne[i])
{
int j=e[i];
if(depth[j]>depth[t]+1)
{
depth[j]=depth[t]+1;
q.push(j);
fa[j][0]=t;
for(k=1;k<=20;k++) fa[j][k]=fa[fa[j][k-1]][k-1];
}
}
}
}
int lca(int x,int y)
{
if(depth[x]<depth[y]) swap(x,y);
for(register int j=20;j>=0;j--)
if(depth[fa[x][j]]>=depth[y]) x=fa[x][j];
if(x==y) return x;
for(register int j=20;j>=0;j--)
{
if(fa[x][j]!=fa[y][j])
{
x=fa[x][j];
y=fa[y][j];
}
}
return fa[x][0];
}
int dist(int xx,int yy)
{
int ll=lca(xx,yy);
return abs(depth[ll]-depth[xx])+abs(depth[ll]-depth[yy]);
}
int main()
{
memset(h,-1,sizeof(h));
memset(ne,-1,sizeof(ne));
cin>>n>>m;
for(i=1;i<n;i++)
{
int x,y;
cin>>x>>y;
add(x,y);
add(y,x);
}
bfs(1);
while(m--)
{
int a=0,b=0,c=0,d=0;
cin>>a>>b>>c>>d;
cout<<lca(a,b)<<' '<<lca(c,d)<<endl<<endl;
if((dist(a,b)+dist(c,d))>=(dist(a,c)+dist(b,d))) cout<<'Y'<<endl;
else cout<<'N'<<endl;
}
return 0;
}