#include<bits/stdc++.h>
using namespace std;
const int M=5e6+110;
int read(){
int sum=0,k=1;
char c=getchar();
while(c>'9'||c<'0'){
if(c=='-')k=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
sum=sum*10+c-'0';
c=getchar();
}
return sum*k;
}
struct w{
int next,to;
}e[M];
int head[M],k=0;
void add(int u,int v){
e[++k].next=head[u];
e[k].to=v;
head[u]=k;
}
int n,q;
//找环
int dfn[M],time_stamp=0,len=0,fa[M],loop[M];
bool inring[M];
void find_dfs(int u){
dfn[u]=++time_stamp;
for(int i=head[u];i;i=e[i].next){
int v=e[i].to;
if(v!=fa[u]){
if(dfn[v]==0){
fa[v]=u;
find_dfs(v);
}
else if(dfn[v]>=dfn[u]){
loop[++len]=u;
inring[u]=true;
// printf("%lld\n",u);
for(int j=v;j!=u;j=fa[j]){
// printf("%lld\n",v);
loop[++len]=j;
inring[fa[j]]=true;
}
}
}
}
}
int dis[M],toring[M];
void dis_dfs(int u,int ft,int to_ring_id){
toring[u]=to_ring_id;
for(int i=head[u];i;i=e[i].next){
int v=e[i].to;
if(v!=fa[u]&&inring[v]==0){
dis[v]=dis[u]+1;
dis_dfs(v,u,to_ring_id);
}
}
}
signed main(){
n=read(),q=read();
for(int i=1;i<=n;i++){
int u=read(),v=read();
add(v,u),add(u,v);
}
find_dfs(1);
// for(int i=1;i<=len;i++)printf("%lld ",loop[i]);
for(int i=1;i<=len;i++)dis_dfs(loop[i],0,i);
// printf("\n");
while(q--){
int x=read(),y=read();
int d1=dis[x],d2=dis[y],t1=toring[x],t2=toring[y];
// cout<<d2<<" "<<d2+min(abs(t1-t2),len-abs(t1-t2))<<" "<<d1<<endl;
if(d2+min(abs(t1-t2),len-abs(t1-t2))>d1) printf("Survive\n");
else printf("Deception\n");
}
return 0;
}
感觉脑袋尖尖的