#include <iostream>
using namespace std;
char mark[] = {'X', 'O'};
int x_win = 0, o_win = 0, draw = 0;
bool win(char board[3][3])
{
for (int i = 0; i < 3; i++) {
if (board[i][0] != '\0' && board[i][0] == board[i][1] && board[i][2] == board[i][1]) {
return true;
}
if (board[0][i] != '\0' && board[0][i] == board[1][i] && board[2][i] == board[1][i]) {
return true;
}
}
if (board[0][0] != '\0' && board[0][0] == board[1][1] && board[1][1] == board[2][2]) {
return true;
}
if (board[0][2] != '\0' && board[0][2] == board[1][1] && board[1][1] == board[2][0]) {
return true;
}
return false;
}
int move(char board[3][3], int turn, int chances)
{
if (win(board)) {
if(turn == 0) {
o_win++;
} else {
x_win++;
}
return 1;
}
if (chances == 9) {
draw++;
return 1;
}
int ans = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (board[i][j] == '\0') {
board[i][j] = mark[turn];
ans += move(board, 1 - turn, chances + 1);
board[i][j] = '\0';
}
}
}
return ans;
}
int main() {
char board[3][3] = {'\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0'};
int ans = move(board, 0, 0);
cout << "Total Games: " << ans << endl;
cout << "X Wins: " << x_win << endl;
cout << "Y wins: " << o_win << endl;
cout << "Draw: " << draw << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNoYXIgbWFya1tdID0geydYJywgJ08nfTsKaW50IHhfd2luID0gMCwgb193aW4gPSAwLCBkcmF3ID0gMDsKCmJvb2wgd2luKGNoYXIgYm9hcmRbM11bM10pCnsKCWZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CgkJaWYgKGJvYXJkW2ldWzBdICE9ICdcMCcgJiYgYm9hcmRbaV1bMF0gPT0gYm9hcmRbaV1bMV0gJiYgYm9hcmRbaV1bMl0gPT0gYm9hcmRbaV1bMV0pIHsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCWlmIChib2FyZFswXVtpXSAhPSAnXDAnICYmIGJvYXJkWzBdW2ldID09IGJvYXJkWzFdW2ldICYmIGJvYXJkWzJdW2ldID09IGJvYXJkWzFdW2ldKSB7CgkJCXJldHVybiB0cnVlOwoJCX0KCX0KCQoJaWYgKGJvYXJkWzBdWzBdICE9ICdcMCcgJiYgYm9hcmRbMF1bMF0gPT0gYm9hcmRbMV1bMV0gJiYgYm9hcmRbMV1bMV0gPT0gYm9hcmRbMl1bMl0pIHsKCQlyZXR1cm4gdHJ1ZTsKCX0KCQoJaWYgKGJvYXJkWzBdWzJdICE9ICdcMCcgJiYgYm9hcmRbMF1bMl0gPT0gYm9hcmRbMV1bMV0gJiYgYm9hcmRbMV1bMV0gPT0gYm9hcmRbMl1bMF0pIHsKCQlyZXR1cm4gdHJ1ZTsKCX0KCQoJcmV0dXJuIGZhbHNlOwp9CgppbnQgbW92ZShjaGFyIGJvYXJkWzNdWzNdLCBpbnQgdHVybiwgaW50IGNoYW5jZXMpCnsKCWlmICh3aW4oYm9hcmQpKSB7CgkJaWYodHVybiA9PSAwKSB7CgkJCW9fd2luKys7CgkJfSBlbHNlIHsKCQkJeF93aW4rKzsKCQl9CgkJcmV0dXJuIDE7Cgl9CgkKCWlmIChjaGFuY2VzID09IDkpIHsKCQlkcmF3Kys7CgkJcmV0dXJuIDE7Cgl9CgkKCWludCBhbnMgPSAwOwoJZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKCQlmb3IgKGludCBqID0gMDsgaiA8IDM7IGorKykgewoJCQlpZiAoYm9hcmRbaV1bal0gPT0gJ1wwJykgewoJCQkJYm9hcmRbaV1bal0gPSBtYXJrW3R1cm5dOwoJCQkJYW5zICs9IG1vdmUoYm9hcmQsIDEgLSB0dXJuLCBjaGFuY2VzICsgMSk7CgkJCQlib2FyZFtpXVtqXSA9ICdcMCc7CgkJCX0KCQl9Cgl9CgkKCXJldHVybiBhbnM7Cn0KCmludCBtYWluKCkgewoJY2hhciBib2FyZFszXVszXSA9IHsnXDAnLCAnXDAnLCAnXDAnLCAnXDAnLCAnXDAnLCAnXDAnLCAnXDAnLCAnXDAnLCAnXDAnfTsKCQoJaW50IGFucyA9IG1vdmUoYm9hcmQsIDAsIDApOwoJCgljb3V0IDw8ICJUb3RhbCBHYW1lczogIiA8PCBhbnMgPDwgZW5kbDsKCWNvdXQgPDwgIlggV2luczogIiA8PCB4X3dpbiA8PCBlbmRsOwoJY291dCA8PCAiWSB3aW5zOiAiIDw8IG9fd2luIDw8IGVuZGw7Cgljb3V0IDw8ICJEcmF3OiAiIDw8IGRyYXcgPDwgZW5kbDsKCQoJcmV0dXJuIDA7Cn0=