#include <cstdio>
#include <vector>
#include <deque>
#include <queue>
#include <map>
#include <set>
#include <algorithm>
#include <functional>
#include <numeric>
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
typedef long long ll;
const int SIZE = 4;
char readNext(int i, int j, char ch, vector<string> &cell){
if (i < 0 || i >= SIZE || j < 0 || j >= SIZE){
return 'z'; // fail
}
if (ch == 'T'){
return cell[j][i];
}
else if (ch == cell[j][i] || cell[j][i] == 'T'){
return ch;
}
else{
return 'z';
}
}
string getAns(vector<string> &cell){
string ret;
bool isFull = true;
for(int i = 0; i < SIZE; ++i){
for(int j = 0; j < SIZE; ++j){
if (cell[j][i] == '.') isFull = false;
}
}
int di[] = {0, 1, 1, -1};
int dj[] = {1, 0, 1, 1};
for(int i = 0; i < SIZE; ++i){
for(int j = 0; j < SIZE; ++j){
for(int d = 0; d < 4; ++d){
char ch = cell[j][i];
// printf("i, j, d = %d, %d, %d\n", i, j, d);
for(int rep = 0; rep < SIZE; ++rep){
ch = readNext(i+di[d]*rep, j+dj[d]*rep, ch, cell);
// printf(" ch = %c\n", ch);
}
if (ch == 'X'){
return "X won";
}
else if (ch == 'O'){
return "O won";
}
}
}
}
return isFull ? "Draw" : "Game has not completed";
}
int main(void)
{
int T;
cin >> T;
for(int t = 0; t < T; ++t){
vector<string> cell;
for(int i = 0; i < SIZE; ++i){
string str;
cin >> str;
cell.push_back(str);
}
cout << "Case #" << (t+1) << ": " << getAns(cell) << endl;
}
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGRlcXVlPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxmdW5jdGlvbmFsPgojaW5jbHVkZSA8bnVtZXJpYz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y21hdGg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKCmNvbnN0IGludCBTSVpFID0gNDsKCgpjaGFyIHJlYWROZXh0KGludCBpLCBpbnQgaiwgY2hhciBjaCwgdmVjdG9yPHN0cmluZz4gJmNlbGwpewogICAgaWYgKGkgPCAwIHx8IGkgPj0gU0laRSB8fCBqIDwgMCB8fCBqID49IFNJWkUpewogICAgICAgICAgICByZXR1cm4gJ3onOyAvLyBmYWlsCiAgICB9CiAgICBpZiAoY2ggPT0gJ1QnKXsKICAgICAgICByZXR1cm4gY2VsbFtqXVtpXTsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09IGNlbGxbal1baV0gfHwgY2VsbFtqXVtpXSA9PSAnVCcpewogICAgICAgIHJldHVybiBjaDsKICAgIH0KICAgIGVsc2V7CiAgICAgICAgcmV0dXJuICd6JzsKICAgIH0KfQoKc3RyaW5nIGdldEFucyh2ZWN0b3I8c3RyaW5nPiAmY2VsbCl7CiAgICBzdHJpbmcgcmV0OwoKICAgIGJvb2wgaXNGdWxsID0gdHJ1ZTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBTSVpFOyArK2kpewogICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBTSVpFOyArK2opewogICAgICAgICAgICBpZiAoY2VsbFtqXVtpXSA9PSAnLicpIGlzRnVsbCA9IGZhbHNlOwogICAgICAgIH0KICAgIH0KICAgICAgICAKICAgIGludCBkaVtdID0gezAsIDEsIDEsIC0xfTsKICAgIGludCBkaltdID0gezEsIDAsIDEsIDF9OwogICAgZm9yKGludCBpID0gMDsgaSA8IFNJWkU7ICsraSl7CiAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IFNJWkU7ICsrail7CiAgICAgICAgICAgIGZvcihpbnQgZCA9IDA7IGQgPCA0OyArK2QpewogICAgICAgICAgICAgICAgY2hhciBjaCA9IGNlbGxbal1baV07CiAgICAgICAgICAgICAgICAvLyBwcmludGYoImksIGosIGQgPSAlZCwgJWQsICVkXG4iLCBpLCBqLCBkKTsKICAgICAgICAgICAgICAgIGZvcihpbnQgcmVwID0gMDsgcmVwIDwgU0laRTsgKytyZXApewogICAgICAgICAgICAgICAgICAgIGNoID0gcmVhZE5leHQoaStkaVtkXSpyZXAsIGorZGpbZF0qcmVwLCBjaCwgY2VsbCk7CiAgICAgICAgICAgICAgICAgICAgLy8gcHJpbnRmKCIgIGNoID0gJWNcbiIsIGNoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnWCcpewogICAgICAgICAgICAgICAgICAgIHJldHVybiAiWCB3b24iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gJ08nKXsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gIk8gd29uIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gaXNGdWxsID8gIkRyYXciIDogIkdhbWUgaGFzIG5vdCBjb21wbGV0ZWQiOwp9CgppbnQgbWFpbih2b2lkKQp7CiAgICBpbnQgVDsKICAgIGNpbiA+PiBUOwoKICAgIAogICAgZm9yKGludCB0ID0gMDsgdCA8IFQ7ICsrdCl7CiAgICAgICAgdmVjdG9yPHN0cmluZz4gY2VsbDsKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgU0laRTsgKytpKXsKICAgICAgICAgICAgc3RyaW5nIHN0cjsKICAgICAgICAgICAgY2luID4+IHN0cjsKICAgICAgICAgICAgY2VsbC5wdXNoX2JhY2soc3RyKTsKICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgIGNvdXQgPDwgIkNhc2UgIyIgPDwgKHQrMSkgPDwgIjogIiA8PCBnZXRBbnMoY2VsbCkgPDwgZW5kbDsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=
NgpYWFhUCi4uLi4KT08uLgouLi4uCgpYT1hUClhYT08KT1hPWApYWE9PCgpYT1guCk9YLi4KLi4uLgouLi4uCgpPT1hYCk9YWFgKT1guVApPLi5PCgpYWFhPCi4uTy4KLk8uLgpULi4uCgpPWFhYClhPLi4KLi5PLgouLi5P
6
XXXT
....
OO..
....
XOXT
XXOO
OXOX
XXOO
XOX.
OX..
....
....
OOXX
OXXX
OX.T
O..O
XXXO
..O.
.O..
T...
OXXX
XO..
..O.
...O