旅行
题号:NC210354
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

皮卡丘所生活的国家有 n 个城市,可以分别用  表示;一共有 m 条单行道连接着这 n 个城市。每条单行道 (u,v) 表示生活在城市 u 的神奇宝贝可以到达城市 v,但生活在城市 v 的神奇宝贝不能通过这条单行道到达城市 u 。

皮卡丘计划了许多旅行方案:每个旅行方案 [u,v] 表示城市 u 是出发站,城市 v 是终点站。但有些旅行方案存在缺陷,即从出发站出发后无法到达终点站,这样的方案我们称作为不好的(Bad)方案,否则称为好的(Good)方案。

聪明的你能否帮助皮卡丘判断每一个旅行方案是好是坏呢?

除样例外,所有的测试数据中的道路和方案均随机生成。生成测试数据的 C++ 代码如下:

unsigned int seed;
unsigned int xorshift32() {
  unsigned int x = seed;
  x ^= x << 13;
  x ^= x >> 17;
  x ^= x << 5;
  return seed = x;
}
void gen(int n, int m, int q) {
  // n: number of vertices
  // m: number of edges
  // q: number of queries
  // initialize the seed with a random value.
  cout << n << ' ' << m << endl;
  for (int i = 0, u, v; i < m; i++) {
    u = xorshift32() % n;
    v = xorshift32() % n;
    cout << u << ' ' << v << endl;
  }
  cout << q << endl;
  for (int i = 0, u, v; i < q; i++) {
    u = xorshift32() % n;
    v = xorshift32() % n;
    cout << u << ' ' << v << endl;
  }
}

输入描述:

第一行输入两个整数 n,m (, ),分别表示城市的数量和道路的数量。

接下来输入 m 行,每行输入两个整数 u,v (),表示一条单行道 (u,v)。

第 m + 2 行输入一个整数 q (),表示方案的数量。

接下来输入 q 行,每行输入两个整数 x, y (),表示一组旅行方案。

输出描述:

对于每一种方案,在一行输出 Good 或 Bad 表示这个方案的好坏。
示例1

输入

复制
11 12
0 1
0 2
1 3
2 4
2 5
3 6
3 7
4 8
4 9
5 10
5 4
8 1
5
0 7
9 1
2 1
5 6
10 8

输出

复制
Good
Bad
Good
Good
Bad