#include #include using namespace std; bool del[200005]; vector v[200005]; int par[200005],sz[200005],dep[200005],depx; void pre(int node,int p) { for (int u:v[node]) { if (u!=p) { par[u]=node; dep[u]=dep[node]+1; pre(u,node); } } } vector h; int query(char c,int u) { printf("%c %d\n",c,u); fflush(stdout); int ans; scanf("%d",&ans); return ans; } int getsz(int node,int p) { sz[node]=1; for (int u:v[node]) { if (!del[u] && u!=p) sz[node]+=getsz(u,node); } return sz[node]; } int find(int node,int p,int nn) { for (int u:v[node]) { if (!del[u] && u!=p && sz[u]>nn/2) return find(u,node,nn); } return node; } int dfs(int node) { getsz(node,0); int c=find(node,0,sz[node]),d=query('d',c); if (!d) return c; del[c]=1; if (dep[c]+d==depx) return dfs(query('s',c)); return dfs(par[c]); } int main() { int n; scanf("%d",&n); for (int i=1;i