#include using namespace std; int rs, cs; void setcell(int &board, int r, int c) { board |= 1<<(r * cs + c); } int getcell(int board, int r, int c) { if (r < 0) r += rs; if (c < 0) c += cs; if (r >= rs) r -= rs; if (c >= cs) c -= cs; return (board & (1<<(r*cs+c))) ? 1 : 0; } int nneighbors(int board, int r, int c) { return getcell(board, r - 1, c - 1) + getcell(board, r - 1, c + 0) + getcell(board, r - 1, c + 1) + getcell(board, r + 0, c + 1) + getcell(board, r + 1, c + 1) + getcell(board, r + 1, c + 0) + getcell(board, r + 1, c - 1) + getcell(board, r + 0, c - 1); } int evolve(int board) { int out = 0; for (int r = 0; r < rs; ++r) { for (int c = 0; c < cs; ++c) { int cell = getcell(board, r, c); int near = nneighbors(board, r, c); if (cell) { if (near == 2 || near == 3) setcell(out, r, c); } else { if (near == 3) setcell(out, r, c); } } } return out; } int main(void) { for (int casei = 1; ; ++casei) { cin >> rs >> cs; if (rs == 0) break; int target = 0; int n; cin >> n; while (n--) { int r, c; cin >> r >> c; setcell(target, r, c); } int ancestors = 0; for (int anc = 0; anc < (1<<(cs*rs)); ++anc) { if (evolve(anc) == target) ++ancestors; } cout << "Case " << casei << ": "; if (ancestors == 0) cout << "Garden of Eden."; else cout << ancestors << " possible ancestors."; cout << endl; } return 0; }