#include<iostream>
#include<algorithm>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<string>
#include<vector>
#include<queue>
#include<list>
using namespace std;
typedef long long lld;
typedef unsigned int ud;
#define oo 0x3f3f3f3f
#define maxn 100010
#define maxm 200010
struct Edge
{
int v, next;
}E[maxm<<1];
int head[maxn], tol, mark[maxn];
int low[maxn], dfn[maxn];
int bridge[maxn][2], bg, con;
int parent[maxn], father[maxn];
struct Node
{
int u, v;
}line[maxn];
void Init()
{
memset(head, -1, sizeof head);
memset(mark, 0, sizeof mark);
memset(low, 0, sizeof low);
memset(dfn, 0, sizeof dfn);
memset(bridge, 0, sizeof bridge);
memset(father, -1, sizeof father);
for (int i = 0; i < maxn; i++)
parent[i] = i;
bg = 0;
tol = 0;
}
int find(int x)
{
if (parent[x] == x)
return x;
return parent[x] = find(parent[x]);
}
bool merge(int x, int y)
{
int fx = find(x);
int fy = find(y);
if (fx != fy)
{
parent[fx] = fy;
return true;
}
return false;
}
void add_edge(int u, int v)
{
E[tol].v = v;
E[tol].next = head[u];
head[u] = tol++;
}
void DFS(int u, int fa, int dep)
{
mark[u] = 1;
dfn[u] = low[u] = dep;
for (int i = head[u]; i != -1; i = E[i].next)
{
int v = E[i].v;
if (mark[v] == 0)
{
DFS(v, u, dep + 1);
father[v] = u;
low[u] = min(low[u], low[v]);
if (low[v]>dfn[u])
{
bridge[bg][0] = u;
bridge[bg][1] = v;
bg++;
}
else
{
merge(u, v);
}
}
else if (mark[v] == 1 && v != fa)
{
low[u] = min(low[u], dfn[v]);
}
}
mark[u] = 2;
}
void LCA(int u, int v)
{
while (u != v)
{
while (dfn[u] >= dfn[v] && u != v)
{
if (merge(u, father[u]))
bg--;
u = father[u];
}
while(dfn[v] >= dfn[u] && u != v)
{
if (merge(v, father[v]))
bg--;
v = father[v];
}
}
}
int main()
{
int n, m, q, cas = 1;
int u, v;
while (scanf("%d%d", &n, &m) && n && m)
{
Init();
for (int i = 1; i <= m; i++)
{
scanf("%d%d", &u, &v);
add_edge(u, v);
add_edge(v, u);
}
scanf("%d", &q);
for (int i = 1; i <= q;i++)
scanf("%d%d", &line[i].u, &line[i].v);
for (int i = 1; i <= n;i++)
if (!mark[i])
DFS(i, -1, 1);
printf("Case %d:\n", cas++);
for (int i = 1; i <= q; i++)
{
LCA(line[i].u, line[i].v);
printf("%d\n", bg);
}
}
return 0;
}