#include<bits/stdc++.h>
#define For(i,m,n) for(register int i=m;i<n;i++)
#define rFor(i,m,n) for(register int i=m;i>n;i--)
#define r(a) read(a)
#define rr(a,b) read(a),read(b)
#define rrr(a,b,c) read(a),read(b),read(c)
using namespace std;
typedef long long ll;
typedef unsigned long long Ull;
template <class T>
inline void read(T &x)
{
x=0;
T f=1;
char ch=getchar();
while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
x=x*f;
}
const int MaxN = 200, MaxM = 40010;
const int INF=1e9;
const int MOD=100003;
int dist[MaxN][MaxN];
map<int,set<int> > mp;
bool IsExist[MaxN][MaxN];
int n,m;
int d;
void input()
{
rr(n,m);
For(i,1,n+1) For(j,1,n+1) if(i!=j) dist[i][j]=INF;
For(i,1,m+1){
int u,v,w;rr(u,v);
w=1;
dist[u][v]=w;
dist[v][u]=w;
mp[u*100+v].insert(u);
mp[u*100+v].insert(v);
mp[v*100+u].insert(u);
mp[v*100+u].insert(v);
}
}
void Floyd()
{
For(k,1,n+1){
For(i,1,n+1){
For(j,1,n+1){
int t=dist[i][k]+dist[k][j];
if(dist[i][j]>=t){
dist[i][j]=t;
dist[j][i]=t;
if(dist[i][j]>t){
mp[i*100+j].clear();
mp[j*100+i].clear();
}
for(set<int>::iterator Iter=mp[i*100+k].begin();Iter!=mp[i*100+k].end();Iter++){
mp[i*100+j].insert(*Iter);
mp[j*100+i].insert(*Iter);
}
for(set<int>::iterator Iter=mp[k*100+j].begin();Iter!=mp[k*100+j].end();Iter++){
mp[i*100+j].insert(*Iter);
mp[j*100+i].insert(*Iter);
}
}
}
}
}
}
int main()
{
input();
Floyd();
r(d);
For(i,0,d){
int x,y;rr(x,y);
for(set<int>::iterator Iter=mp[x*100+y].begin();Iter!=mp[x*100+y].end();Iter++){
cout<<*Iter<<' ';
}
cout<<'\n';
}
return 0;
}