QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#875200#9567. Toe-Tac-Ticsucup-team2796AC ✓62ms6096kbC++2323.7kb2025-01-29 12:41:442025-01-29 12:41:51

Judging History

This is the latest submission verdict.

  • [2025-01-29 12:41:51]
  • Judged
  • Verdict: AC
  • Time: 62ms
  • Memory: 6096kb
  • [2025-01-29 12:41:44]
  • Submitted

answer

// 1 "library/Template/template.hpp"
#include <bits/stdc++.h>
using namespace std;

#define rep(i, a, b) for (int i = (int)(a); i < (int)(b); i++)
#define rrep(i, a, b) for (int i = (int)(b)-1; i >= (int)(a); i--)
#define ALL(v) (v).begin(), (v).end()
#define UNIQUE(v) sort(ALL(v)), (v).erase(unique(ALL(v)), (v).end())
#define SZ(v) (int)v.size()
#define MIN(v) *min_element(ALL(v))
#define MAX(v) *max_element(ALL(v))
#define LB(v, x) int(lower_bound(ALL(v), (x)) - (v).begin())
#define UB(v, x) int(upper_bound(ALL(v), (x)) - (v).begin())

using uint = unsigned int;
using ll = long long int;
using ull = unsigned long long;
using i128 = __int128_t;
using u128 = __uint128_t;
const int inf = 0x3fffffff;
const ll INF = 0x1fffffffffffffff;

template <typename T> inline bool chmax(T &a, T b) {
    if (a < b) {
        a = b;
        return 1;
    }
    return 0;
}
template <typename T> inline bool chmin(T &a, T b) {
    if (a > b) {
        a = b;
        return 1;
    }
    return 0;
}
template <typename T, typename U> T ceil(T x, U y) {
    assert(y != 0);
    if (y < 0)
        x = -x, y = -y;
    return (x > 0 ? (x + y - 1) / y : x / y);
}
template <typename T, typename U> T floor(T x, U y) {
    assert(y != 0);
    if (y < 0)
        x = -x, y = -y;
    return (x > 0 ? x / y : (x - y + 1) / y);
}
template <typename T> int popcnt(T x) {
    return __builtin_popcountll(x);
}
template <typename T> int topbit(T x) {
    return (x == 0 ? -1 : 63 - __builtin_clzll(x));
}
template <typename T> int lowbit(T x) {
    return (x == 0 ? -1 : __builtin_ctzll(x));
}

template <class T, class U>
ostream &operator<<(ostream &os, const pair<T, U> &p) {
    os << "P(" << p.first << ", " << p.second << ")";
    return os;
}
template <typename T> ostream &operator<<(ostream &os, const vector<T> &vec) {
    os << "{";
    for (int i = 0; i < vec.size(); i++) {
        os << vec[i] << (i + 1 == vec.size() ? "" : ", ");
    }
    os << "}";
    return os;
}
template <typename T, typename U>
ostream &operator<<(ostream &os, const map<T, U> &map_var) {
    os << "{";
    for (auto itr = map_var.begin(); itr != map_var.end(); itr++) {
        os << "(" << itr->first << ", " << itr->second << ")";
        itr++;
        if (itr != map_var.end())
            os << ", ";
        itr--;
    }
    os << "}";
    return os;
}
template <typename T> ostream &operator<<(ostream &os, const set<T> &set_var) {
    os << "{";
    for (auto itr = set_var.begin(); itr != set_var.end(); itr++) {
        os << *itr;
        ++itr;
        if (itr != set_var.end())
            os << ", ";
        itr--;
    }
    os << "}";
    return os;
}
#ifdef LOCAL
#define show(...) _show(0, #__VA_ARGS__, __VA_ARGS__)
#else
#define show(...) true
#endif
template <typename T> void _show(int i, T name) {
    cerr << '\n';
}
template <typename T1, typename T2, typename... T3>
void _show(int i, const T1 &a, const T2 &b, const T3 &...c) {
    for (; a[i] != ',' && a[i] != '\0'; i++)
        cerr << a[i];
    cerr << ":" << b << " ";
    _show(i + 1, a, c...);
}
// 2 "library/Utility/fastio.hpp"
#include <unistd.h>
namespace fastio {
static constexpr uint32_t SZ = 1 << 17;
char ibuf[SZ];
char obuf[SZ];
char out[100];
// pointer of ibuf, obuf

uint32_t pil = 0, pir = 0, por = 0;

struct Pre {
    char num[10000][4];
    constexpr Pre() : num() {
        for (int i = 0; i < 10000; i++) {
            int n = i;
            for (int j = 3; j >= 0; j--) {
                num[i][j] = n % 10 | '0';
                n /= 10;
            }
        }
    }
} constexpr pre;

inline void load() {
    memmove(ibuf, ibuf + pil, pir - pil);
    pir = pir - pil + fread(ibuf + pir - pil, 1, SZ - pir + pil, stdin);
    pil = 0;
    if (pir < SZ)
        ibuf[pir++] = '\n';
}

inline void flush() {
    fwrite(obuf, 1, por, stdout);
    por = 0;
}

void rd(char &c) {
    do {
        if (pil + 1 > pir)
            load();
        c = ibuf[pil++];
    } while (isspace(c));
}

void rd(string &x) {
    x.clear();
    char c;
    do {
        if (pil + 1 > pir)
            load();
        c = ibuf[pil++];
    } while (isspace(c));
    do {
        x += c;
        if (pil == pir)
            load();
        c = ibuf[pil++];
    } while (!isspace(c));
}

template <typename T> void rd_real(T &x) {
    string s;
    rd(s);
    x = stod(s);
}

template <typename T> void rd_integer(T &x) {
    if (pil + 100 > pir)
        load();
    char c;
    do
        c = ibuf[pil++];
    while (c < '-');
    bool minus = 0;
    if constexpr (is_signed<T>::value || is_same_v<T, i128>) {
        if (c == '-') {
            minus = 1, c = ibuf[pil++];
        }
    }
    x = 0;
    while ('0' <= c) {
        x = x * 10 + (c & 15), c = ibuf[pil++];
    }
    if constexpr (is_signed<T>::value || is_same_v<T, i128>) {
        if (minus)
            x = -x;
    }
}

void rd(int &x) {
    rd_integer(x);
}
void rd(ll &x) {
    rd_integer(x);
}
void rd(i128 &x) {
    rd_integer(x);
}
void rd(uint &x) {
    rd_integer(x);
}
void rd(ull &x) {
    rd_integer(x);
}
void rd(u128 &x) {
    rd_integer(x);
}
void rd(double &x) {
    rd_real(x);
}
void rd(long double &x) {
    rd_real(x);
}

template <class T, class U> void rd(pair<T, U> &p) {
    return rd(p.first), rd(p.second);
}
template <size_t N = 0, typename T> void rd_tuple(T &t) {
    if constexpr (N < std::tuple_size<T>::value) {
        auto &x = std::get<N>(t);
        rd(x);
        rd_tuple<N + 1>(t);
    }
}
template <class... T> void rd(tuple<T...> &tpl) {
    rd_tuple(tpl);
}

template <size_t N = 0, typename T> void rd(array<T, N> &x) {
    for (auto &d : x)
        rd(d);
}
template <class T> void rd(vector<T> &x) {
    for (auto &d : x)
        rd(d);
}

void read() {}
template <class H, class... T> void read(H &h, T &...t) {
    rd(h), read(t...);
}

void wt(const char c) {
    if (por == SZ)
        flush();
    obuf[por++] = c;
}
void wt(const string s) {
    for (char c : s)
        wt(c);
}
void wt(const char *s) {
    size_t len = strlen(s);
    for (size_t i = 0; i < len; i++)
        wt(s[i]);
}

template <typename T> void wt_integer(T x) {
    if (por > SZ - 100)
        flush();
    if (x < 0) {
        obuf[por++] = '-', x = -x;
    }
    int outi;
    for (outi = 96; x >= 10000; outi -= 4) {
        memcpy(out + outi, pre.num[x % 10000], 4);
        x /= 10000;
    }
    if (x >= 1000) {
        memcpy(obuf + por, pre.num[x], 4);
        por += 4;
    } else if (x >= 100) {
        memcpy(obuf + por, pre.num[x] + 1, 3);
        por += 3;
    } else if (x >= 10) {
        int q = (x * 103) >> 10;
        obuf[por] = q | '0';
        obuf[por + 1] = (x - q * 10) | '0';
        por += 2;
    } else
        obuf[por++] = x | '0';
    memcpy(obuf + por, out + outi + 4, 96 - outi);
    por += 96 - outi;
}

template <typename T> void wt_real(T x) {
    ostringstream oss;
    oss << fixed << setprecision(15) << double(x);
    string s = oss.str();
    wt(s);
}

void wt(int x) {
    wt_integer(x);
}
void wt(ll x) {
    wt_integer(x);
}
void wt(i128 x) {
    wt_integer(x);
}
void wt(uint x) {
    wt_integer(x);
}
void wt(ull x) {
    wt_integer(x);
}
void wt(u128 x) {
    wt_integer(x);
}
void wt(double x) {
    wt_real(x);
}
void wt(long double x) {
    wt_real(x);
}

template <class T, class U> void wt(const pair<T, U> val) {
    wt(val.first);
    wt(' ');
    wt(val.second);
}
template <size_t N = 0, typename T> void wt_tuple(const T t) {
    if constexpr (N < std::tuple_size<T>::value) {
        if constexpr (N > 0) {
            wt(' ');
        }
        const auto x = std::get<N>(t);
        wt(x);
        wt_tuple<N + 1>(t);
    }
}
template <class... T> void wt(tuple<T...> tpl) {
    wt_tuple(tpl);
}
template <class T, size_t S> void wt(const array<T, S> val) {
    auto n = val.size();
    for (size_t i = 0; i < n; i++) {
        if (i)
            wt(' ');
        wt(val[i]);
    }
}
template <class T> void wt(const vector<T> val) {
    auto n = val.size();
    for (size_t i = 0; i < n; i++) {
        if (i)
            wt(' ');
        wt(val[i]);
    }
}

void print() {
    wt('\n');
}
template <class Head, class... Tail> void print(Head &&head, Tail &&...tail) {
    wt(head);
    if (sizeof...(Tail))
        wt(' ');
    print(forward<Tail>(tail)...);
}
void __attribute__((destructor)) _d() {
    flush();
}
} // namespace fastio

using fastio::flush;
using fastio::print;
using fastio::read;

inline void first(bool i = true) {
    print(i ? "first" : "second");
}
inline void Alice(bool i = true) {
    print(i ? "Alice" : "Bob");
}
inline void Takahashi(bool i = true) {
    print(i ? "Takahashi" : "Aoki");
}
inline void yes(bool i = true) {
    print(i ? "yes" : "no");
}
inline void Yes(bool i = true) {
    print(i ? "Yes" : "No");
}
inline void No() {
    print("No");
}
inline void YES(bool i = true) {
    print(i ? "YES" : "NO");
}
inline void NO() {
    print("NO");
}
inline void Yay(bool i = true) {
    print(i ? "Yay!" : ":(");
}
inline void Possible(bool i = true) {
    print(i ? "Possible" : "Impossible");
}
inline void POSSIBLE(bool i = true) {
    print(i ? "POSSIBLE" : "IMPOSSIBLE");
}

/**
 * @brief Fast IO
 */
// // 3 "sol.cpp"

template <unsigned mod = 1000000007> struct fp {
    unsigned v;
    static constexpr int get_mod() {
        return mod;
    }
    constexpr unsigned inv() const {
        assert(v != 0);
        int x = v, y = mod, p = 1, q = 0, t = 0, tmp = 0;
        while (y > 0) {
            t = x / y;
            x -= t * y, p -= t * q;
            tmp = x, x = y, y = tmp;
            tmp = p, p = q, q = tmp;
        }
        if (p < 0)
            p += mod;
        return p;
    }
    constexpr fp(ll x = 0) : v(x >= 0 ? x % mod : (mod - (-x) % mod) % mod) {}
    fp operator-() const {
        return fp() - *this;
    }
    fp pow(ull t) {
        fp res = 1, b = *this;
        while (t) {
            if (t & 1)
                res *= b;
            b *= b;
            t >>= 1;
        }
        return res;
    }
    fp &operator+=(const fp &x) {
        if ((v += x.v) >= mod)
            v -= mod;
        return *this;
    }
    fp &operator-=(const fp &x) {
        if ((v += mod - x.v) >= mod)
            v -= mod;
        return *this;
    }
    fp &operator*=(const fp &x) {
        v = ull(v) * x.v % mod;
        return *this;
    }
    fp &operator/=(const fp &x) {
        v = ull(v) * x.inv() % mod;
        return *this;
    }
    fp operator+(const fp &x) const {
        return fp(*this) += x;
    }
    fp operator-(const fp &x) const {
        return fp(*this) -= x;
    }
    fp operator*(const fp &x) const {
        return fp(*this) *= x;
    }
    fp operator/(const fp &x) const {
        return fp(*this) /= x;
    }
    bool operator==(const fp &x) const {
        return v == x.v;
    }
    bool operator!=(const fp &x) const {
        return v != x.v;
    }
    friend istream &operator>>(istream &is, fp &x) {
        return is >> x.v;
    }
    friend ostream &operator<<(ostream &os, const fp &x) {
        return os << x.v;
    }
};

template <unsigned mod> void rd(fp<mod> &x) {
    fastio::rd(x.v);
}
template <unsigned mod> void wt(fp<mod> x) {
    fastio::wt(x.v);
}
template <typename T> T Inv(ll n) {
    static int md;
    static vector<T> buf({0, 1});
    if (md != T::get_mod()) {
        md = T::get_mod();
        buf = vector<T>({0, 1});
    }
    assert(n > 0);
    n %= md;
    while (SZ(buf) <= n) {
        int k = SZ(buf), q = (md + k - 1) / k;
        buf.push_back(buf[k * q - md] * q);
    }
    return buf[n];
}

template <typename T> T Fact(ll n, bool inv = 0) {
    static int md;
    static vector<T> buf({1, 1}), ibuf({1, 1});
    if (md != T::get_mod()) {
        md = T::get_mod();
        buf = ibuf = vector<T>({1, 1});
    }
    assert(n >= 0 and n < md);
    while (SZ(buf) <= n) {
        buf.push_back(buf.back() * SZ(buf));
        ibuf.push_back(ibuf.back() * Inv<T>(SZ(ibuf)));
    }
    return inv ? ibuf[n] : buf[n];
}

template <typename T> T nPr(int n, int r, bool inv = 0) {
    if (n < 0 || n < r || r < 0)
        return 0;
    return Fact<T>(n, inv) * Fact<T>(n - r, inv ^ 1);
}
template <typename T> T nCr(int n, int r, bool inv = 0) {
    if (n < 0 || n < r || r < 0)
        return 0;
    return Fact<T>(n, inv) * Fact<T>(r, inv ^ 1) * Fact<T>(n - r, inv ^ 1);
}
// sum = n, r tuples
template <typename T> T nHr(int n, int r, bool inv = 0) {
    return nCr<T>(n + r - 1, r - 1, inv);
}
// sum = n, a nonzero tuples and b tuples
template <typename T> T choose(int n, int a, int b) {
    if (n == 0)
        return !a;
    return nCr<T>(n + b - 1, a + b - 1);
}

namespace Random {
mt19937_64 randgen(chrono::steady_clock::now().time_since_epoch().count());
using u64 = unsigned long long;
u64 get() {
    return randgen();
}
template <typename T> T get(T L) { // [0,L]

    return get() % (L + 1);
}
template <typename T> T get(T L, T R) { // [L,R]

    return get(R - L) + L;
}
double uniform() {
    return double(get(1000000000)) / 1000000000;
}
string str(int n) {
    string ret;
    rep(i, 0, n) ret += get('a', 'z');
    return ret;
}
template <typename Iter> void shuffle(Iter first, Iter last) {
    if (first == last)
        return;
    int len = 1;
    for (auto it = first + 1; it != last; it++) {
        len++;
        int j = get(0, len - 1);
        if (j != len - 1)
            iter_swap(it, first + j);
    }
}
template <typename T> vector<T> select(int n, T L, T R) { // [L,R]

    if (n * 2 >= R - L + 1) {
        vector<T> ret(R - L + 1);
        iota(ALL(ret), L);
        shuffle(ALL(ret));
        ret.resize(n);
        return ret;
    } else {
        unordered_set<T> used;
        vector<T> ret;
        while (SZ(used) < n) {
            T x = get(L, R);
            if (!used.count(x)) {
                used.insert(x);
                ret.push_back(x);
            }
        }
        return ret;
    }
}

void relabel(int n, vector<pair<int, int>> &es) {
    shuffle(ALL(es));
    vector<int> ord(n);
    iota(ALL(ord), 0);
    shuffle(ALL(ord));
    for (auto &[u, v] : es)
        u = ord[u], v = ord[v];
}
template <bool directed, bool simple> vector<pair<int, int>> genGraph(int n) {
    vector<pair<int, int>> cand, es;
    rep(u, 0, n) rep(v, 0, n) {
        if (simple and u == v)
            continue;
        if (!directed and u > v)
            continue;
        cand.push_back({u, v});
    }
    int m = get(SZ(cand));
    vector<int> ord;
    if (simple)
        ord = select(m, 0, SZ(cand) - 1);
    else {
        rep(_, 0, m) ord.push_back(get(SZ(cand) - 1));
    }
    for (auto &i : ord)
        es.push_back(cand[i]);
    relabel(n, es);
    return es;
}
vector<pair<int, int>> genTree(int n) {
    vector<pair<int, int>> es;
    rep(i, 1, n) es.push_back({get(i - 1), i});
    relabel(n, es);
    return es;
}
}; // namespace Random

template <typename T> struct Frac {
    T a, b;
    Frac(T _a = 0) {
        init(_a, 1);
    }
    Frac(T _a, T _b) {
        init(_a, _b);
    }
    Frac &init(T _a, T _b) {
        T g = gcd(_a, _b);
        a = _a / g, b = _b / g;
        if (b < 0)
            a = -a, b = -b;
        return *this;
    }
    Frac inv() const {
        return Frac(b, a);
    }
    Frac operator-() const {
        return Frac(-a, b);
    }
    Frac &operator+=(const Frac &x) {
        return init(a * x.b + x.a * b, b * x.b);
    }
    Frac &operator-=(const Frac &x) {
        return init(a * x.b - x.a * b, b * x.b);
    }
    Frac &operator*=(const Frac &x) {
        return init(a * x.a, b * x.b);
    }
    Frac &operator/=(const Frac &x) {
        return init(a * x.b, b * x.a);
    }
    Frac operator+(const Frac &x) const {
        return Frac(*this) += x;
    }
    Frac operator-(const Frac &x) const {
        return Frac(*this) -= x;
    }
    Frac operator*(const Frac &x) const {
        return Frac(*this) *= x;
    }
    Frac operator/(const Frac &x) const {
        return Frac(*this) /= x;
    }
    bool operator<(const Frac &x) const {
        return a * x.b < b * x.a;
    }
    bool operator>(const Frac &x) const {
        return x < *this;
    }
    bool operator<=(const Frac &x) const {
        return !(x < *this);
    }
    bool operator>=(const Frac &x) const {
        return !(*this < x);
    }
    bool operator==(const Frac &x) const {
        return (*this <= x and x <= *this);
    }
    bool operator!=(const Frac &x) const {
        return !(*this == x);
    }

    friend istream &operator>>(istream &is, Frac &x) {
        return is >> x.a >> x.b;
    }
    friend ostream &operator<<(ostream &os, const Frac &x) {
        return os << x.a << '/' << x.b;
    }
};
template <typename T> Frac<T> between(const Frac<T> &x, const Frac<T> &y) {
    if (x.a < x.b and y.b < y.a)
        return Frac(1);
    else if (x.b <= x.a) {
        T add = floor(x.a / x.b);
        return between(x - add, y - add) + add;
    } else
        return between(y.inv(), x.inv()).inv();
}

template <typename T> struct Surreal {
    static constexpr int LG = std::numeric_limits<T>::digits - 2;
    Frac<T> a;
    Surreal(T a = 0) : a(a, 1) {}
    Surreal(T a, T b) : a(a, b) {}
    Surreal(Frac<T> a) : a(a) {}
    static constexpr Surreal infty() {
        return Surreal(INF, 1);
    }
    bool operator==(Surreal const &rhs) const {
        return (a == rhs.a);
    }
    bool operator!=(Surreal const &rhs) const {
        return !(a == rhs);
    }
    bool operator<(Surreal const &rhs) const {
        return (a < rhs.a);
    }
    bool operator<=(Surreal const &rhs) const {
        return (a <= rhs.a);
    }
    bool operator>(Surreal const &rhs) const {
        return (a > rhs.a);
    }
    bool operator>=(Surreal const &rhs) const {
        return (a >= rhs.a);
    }
    friend Surreal operator+(const Surreal &x, const Surreal &y) {
        return x.a + y.a;
    }
    friend Surreal operator-(const Surreal &x, const Surreal &y) {
        return x.a - y.a;
    }
    friend Surreal operator-(const Surreal &x) {
        return -x.a;
    }
    Surreal &operator+=(const Surreal &x) {
        return (*this) = (*this) + x;
    }
    Surreal &operator-=(const Surreal &x) {
        return (*this) = (*this) - x;
    }

    static Surreal between(Surreal L, Surreal R, bool incL = 0, bool incR = 0) {
        Surreal ret(0);
        if (L < ret or (incL and L == ret)) {
            if (ret < R or (incR and R == ret)) {
                return ret;
            }
        }
        bool sign = 0;
        if (R <= 0) {
            sign = 1;
            swap(L, R);
            swap(incL, incR);
            L = -L, R = -R;
        }
        rep(lg, 0, LG + 1) {
            ll num = ceil(L.a.a << lg, L.a.b);
            if ((i128(L.a.a) << lg) == i128(L.a.b) * num and !incL)
                num++;
            ret = Surreal(num, 1LL << lg);
            if (ret < R or (incR and R == ret)) {
                if (sign)
                    ret = -ret;
                return ret;
            }
        }
        assert(0);
    }
    friend ostream &operator<<(ostream &os, const Surreal &x) {
        return os << x.a;
    }
};

struct NumStar {
    using A = Surreal<ll>;
    A a;
    int b;
    NumStar(A a = 0, int b = 0) : a(a), b(b) {}
    NumStar &operator+=(const NumStar &rhs) {
        a += rhs.a, b ^= rhs.b;
        return *this;
    }
    NumStar &operator-=(const NumStar &rhs) {
        a -= rhs.a, b ^= rhs.b;
        return *this;
    }
    NumStar operator-() const {
        return NumStar(-a, b);
    }
    bool operator==(const NumStar &rhs) const {
        return (a == rhs.a && b == rhs.b);
    }
    static int mex(vector<int> &a) {
        vector<int> exi(SZ(a) + 1);
        for (auto &x : a)
            exi[x] = 1;
        int ret = 0;
        while (exi[ret])
            ret++;
        return ret;
    }
    static pair<bool, NumStar> calc(vector<NumStar> lb, vector<NumStar> rb) {
        A L = -A::infty(), R = A::infty();
        vector<int> ls, rs;
        for (auto &num : lb) {
            if (chmax(L, num.a))
                ls.clear();
            if (L == num.a)
                ls.push_back(num.b);
        }
        for (auto &num : rb) {
            if (chmin(R, num.a))
                rs.clear();
            if (R == num.a)
                rs.push_back(num.b);
        }
        int lm = mex(ls), rm = mex(rs);
        if (L < R) {
            return {true, NumStar(A::between(L, R, lm == 0, rm == 0), 0)};
        } else if (L == R) {
            if (lm == rm)
                return {true, NumStar(L, lm)};
        }
        return {false, NumStar()};
    }
    friend ostream &operator<<(ostream &os, const NumStar &x) {
        return os << x.a << "+*" << x.b;
    }
    pair<bool, bool> outcome() {
        if (a > 0)
            return {1, 0};
        if (a < 0)
            return {0, 1};
        if (b == 0)
            return {0, 0};
        return {1, 1};
    }
};

// F(G):= {G_L,G_R} (pair)
template <typename State, typename F>
map<State, NumStar> SolvePartizanGame(const vector<State> &states, F option) {
    map<State, NumStar> ret;
    auto dfs = [&](auto &dfs, const State &current) -> pair<bool, NumStar> {
        if (ret.count(current))
            return {true, ret[current]};
        auto [gl, gr] = option(current);
        vector<NumStar> ls, rs;
        for (auto &to : gl) {
            auto [ch, lv] = dfs(dfs, to);
            if (!ch)
                return {false, NumStar()};
            ls.push_back(lv);
        }
        for (auto &to : gr) {
            auto [ch, rv] = dfs(dfs, to);
            if (!ch)
                return {false, NumStar()};
            rs.push_back(rv);
        }
        auto [ch, val] = NumStar::calc(ls, rs);
        if (!ch)
            return {false, NumStar()};
        return {true, ret[current] = val};
    };
    for (auto &s : states) {
        if (!dfs(dfs, s).first)
            return map<State, NumStar>();
    }
    return ret;
}

vector<tuple<int,int,int>> line={{0,1,2},{3,4,5},{6,7,8},{0,3,6},{1,4,7},{2,5,8},{0,4,8},{2,4,6}};
bool ch(string& s){
    for(auto& [i,j,k]:line)if(s[i]!='.' and s[i]==s[j] and s[j]==s[k]){
        return false;
    }
    return true;
}

int main() {
    vector<string> states;
    auto dfs=[&](auto& dfs,int i,string s)->void{
        if(i==9){
            states.push_back(s);
            return;
        }
        string t;
        t=s+'.';
        dfs(dfs,i+1,t);
        t=s+'o';
        dfs(dfs,i+1,t);
        t=s+'x';
        dfs(dfs,i+1,t);
    };
    string init;
    dfs(dfs,0,init);

    auto move=[&](string s)->pair<vector<string>,vector<string>>{
        vector<string> L,R;
        if(!ch(s)){
            return {L,R};
        }
        rep(i,0,9)if(s[i]=='.'){
            string t=s;
            t[i]='x';
            if(ch(t))L.push_back(t);
            t[i]='o';
            if(ch(t))R.push_back(t);
        }
        return {L,R};
    };
    auto ret=SolvePartizanGame(states,move);

    int T;
    read(T);
    while(T--){
        int n;
        read(n);
        NumStar sum;
        rep(_,0,n){
            string s;
            rep(__,0,3){
                string t;
                read(t);
                s+=t;
            }
            sum+=ret[s];
        }
        // show(sum);
        Alice(sum.outcome().first);
    }
    return 0;
}

这程序好像有点Bug,我给组数据试试?

詳細信息

Test #1:

score: 100
Accepted
time: 35ms
memory: 5836kb

input:

4
1
...
...
...
1
...
oo.
oo.
2
...
oo.
oo.

...
xx.
xx.
2
..x
xo.
...

xo.
o..
.x.

output:

Alice
Alice
Bob
Bob

result:

ok 4 tokens

Test #2:

score: 0
Accepted
time: 61ms
memory: 6092kb

input:

100000
1
...
.x.
.o.
1
oox
xx.
o.x
1
.o.
.x.
.ox
1
.oo
.x.
..o
1
.ox
.oo
x.x
1
...
...
o.x
1
x..
o.o
o..
1
o.x
x.o
o..
1
.oo
.xo
.ox
1
o.o
xo.
..x
1
..o
oxx
xxo
1
xx.
xxo
.oo
1
xox
xoo
oxx
1
xx.
o.o
..o
1
xo.
oxo
oo.
1
xx.
.ox
o.x
1
.xx
...
xx.
1
xoo
oxx
o..
1
.xo
o.x
ox.
1
xoo
oox
...
1
x.o
xxo
.x....

output:

Alice
Bob
Bob
Alice
Alice
Alice
Alice
Alice
Bob
Alice
Bob
Bob
Bob
Alice
Alice
Bob
Bob
Bob
Alice
Alice
Bob
Alice
Alice
Alice
Bob
Alice
Bob
Alice
Alice
Bob
Alice
Alice
Alice
Alice
Bob
Bob
Bob
Alice
Bob
Bob
Alice
Alice
Bob
Bob
Bob
Alice
Alice
Bob
Bob
Alice
Bob
Bob
Bob
Bob
Alice
Alice
Alice
Alice
Alice
...

result:

ok 100000 tokens

Test #3:

score: 0
Accepted
time: 60ms
memory: 6092kb

input:

50000
2
o..
o..
xxo

x.x
oxo
..o
2
x.x
oxo
o.o

.xx
..o
...
2
...
xxo
ox.

o..
ox.
...
2
.o.
oxx
..o

o.o
ox.
.o.
2
xx.
.o.
.oo

xx.
oox
.x.
2
xxo
oxo
xo.

o..
xxo
oxx
2
.xx
oo.
o.o

ox.
...
xoo
2
xxo
o.x
xx.

x..
oxx
o.o
2
x..
x..
o.o

.x.
.xx
.oo
2
oo.
x..
oo.

oox
xox
ox.
2
.oo
o.x
..o

.ox
..x
....

output:

Bob
Bob
Bob
Alice
Bob
Bob
Alice
Bob
Alice
Alice
Alice
Alice
Bob
Alice
Alice
Alice
Bob
Bob
Alice
Alice
Alice
Alice
Bob
Alice
Bob
Alice
Alice
Bob
Alice
Alice
Alice
Bob
Bob
Alice
Bob
Bob
Bob
Bob
Alice
Alice
Alice
Bob
Alice
Bob
Alice
Bob
Bob
Bob
Alice
Alice
Bob
Alice
Bob
Alice
Alice
Alice
Alice
Alice
Al...

result:

ok 50000 tokens

Test #4:

score: 0
Accepted
time: 54ms
memory: 6092kb

input:

50000
2
oxx
x.x
.xo

..x
xx.
.xo
2
.ox
x..
o.o

xo.
x.o
oo.
2
ox.
xxo
o.x

.oo
o.o
x..
2
oxx
o.x
x..

.xx
x.x
.xo
2
.ox
.o.
..x

..o
oxx
xo.
2
.oo
.xo
oxx

.ox
o.x
.o.
2
.x.
ox.
.o.

oo.
xxo
xo.
2
..o
.xo
x.x

oxx
..o
oo.
2
x.o
.oo
xx.

.oo
ox.
oo.
2
o.x
x.x
oxo

xo.
.o.
.x.
2
o.x
oo.
.xx

xoo
oxx
x...

output:

Bob
Alice
Alice
Bob
Bob
Bob
Bob
Alice
Alice
Bob
Bob
Alice
Alice
Bob
Alice
Bob
Alice
Bob
Alice
Alice
Bob
Alice
Alice
Alice
Alice
Bob
Alice
Alice
Alice
Alice
Bob
Alice
Bob
Alice
Bob
Alice
Alice
Alice
Alice
Alice
Alice
Alice
Alice
Alice
Bob
Alice
Bob
Bob
Bob
Bob
Bob
Bob
Bob
Alice
Alice
Bob
Alice
Alice
...

result:

ok 50000 tokens

Test #5:

score: 0
Accepted
time: 57ms
memory: 6092kb

input:

50000
2
o..
x.x
x.o

x.x
..o
oxo
2
.x.
o..
..o

.xo
x.o
.x.
2
oo.
o.o
.o.

.o.
.xx
..o
2
.x.
...
x..

.xo
xox
..x
2
...
..o
...

.xo
x..
x.o
2
xx.
x.o
..o

xx.
..o
x.o
2
o..
..o
.xx

x.x
...
oxx
2
xx.
xox
oox

.o.
...
.oo
2
.xo
.ox
xo.

xx.
ox.
x.o
2
xx.
o.x
oxo

xo.
.xo
...
2
..x
oox
..o

xxo
..o
....

output:

Bob
Alice
Alice
Bob
Alice
Bob
Bob
Alice
Bob
Bob
Alice
Alice
Bob
Alice
Alice
Alice
Bob
Alice
Alice
Bob
Alice
Alice
Bob
Bob
Alice
Alice
Bob
Alice
Alice
Alice
Bob
Alice
Alice
Bob
Alice
Bob
Bob
Alice
Bob
Bob
Alice
Bob
Alice
Alice
Alice
Bob
Bob
Alice
Bob
Alice
Alice
Bob
Bob
Alice
Bob
Alice
Alice
Bob
Alic...

result:

ok 50000 tokens

Test #6:

score: 0
Accepted
time: 62ms
memory: 5984kb

input:

33333
3
...
o.x
..x

..o
oxx
..o

...
.xx
.oo
3
.x.
oo.
x..

ox.
xo.
oxx

oxo
oxo
x.x
3
.o.
o..
.xx

xoo
oox
x.o

oxo
x.x
x.x
3
..x
x..
xox

x.x
x.x
oo.

oox
xoo
x.x
3
.xx
.oo
o..

xx.
oxx
.oo

.xx
xoo
...
3
..o
xo.
xx.

.ox
...
xxo

...
x..
.ox
3
x.x
o.x
.oo

oo.
.o.
.xx

...
o..
.oo
3
xx.
..x
xo.
...

output:

Bob
Bob
Bob
Bob
Alice
Bob
Alice
Bob
Alice
Alice
Bob
Alice
Alice
Bob
Bob
Bob
Bob
Bob
Bob
Bob
Bob
Alice
Bob
Bob
Bob
Alice
Bob
Bob
Bob
Alice
Bob
Alice
Bob
Bob
Bob
Bob
Alice
Bob
Alice
Bob
Alice
Bob
Bob
Bob
Bob
Alice
Alice
Alice
Bob
Alice
Alice
Bob
Bob
Bob
Alice
Bob
Alice
Bob
Alice
Alice
Alice
Alice
Alic...

result:

ok 33333 tokens

Test #7:

score: 0
Accepted
time: 58ms
memory: 5836kb

input:

33333
3
o.x
..x
o.o

o.x
o..
xox

xox
x.o
oxo
3
.x.
.xo
xox

.o.
.xo
x..

.ox
xx.
..x
3
.o.
xx.
o.x

...
x.o
xxo

oo.
x.o
xo.
3
.xo
oo.
x..

.oo
..o
xo.

..x
.oo
xx.
3
oxx
xox
.x.

.oo
oxo
o..

o.x
..o
xo.
3
oox
.xx
..o

o.x
xoo
.x.

..o
o.o
oox
3
xxo
...
ox.

oox
o..
xxo

.oo
xxo
o.x
3
..x
x.o
o..
...

output:

Alice
Bob
Bob
Alice
Alice
Alice
Alice
Alice
Alice
Alice
Alice
Bob
Bob
Bob
Alice
Bob
Alice
Alice
Bob
Alice
Alice
Alice
Bob
Alice
Alice
Bob
Alice
Alice
Bob
Bob
Bob
Alice
Alice
Bob
Alice
Alice
Bob
Alice
Alice
Bob
Bob
Alice
Alice
Alice
Bob
Bob
Alice
Bob
Bob
Alice
Bob
Bob
Alice
Alice
Bob
Bob
Alice
Bob
Bo...

result:

ok 33333 tokens

Test #8:

score: 0
Accepted
time: 61ms
memory: 6092kb

input:

33333
3
xxo
oo.
.xo

o.x
x.x
x.o

o.o
xx.
oo.
3
.xo
x.o
.ox

xox
..o
...

.o.
xx.
oxx
3
.xo
.x.
oo.

.ox
...
oxo

oox
.x.
ox.
3
..x
.xx
..o

..o
oo.
xxo

x.x
ox.
oo.
3
.o.
o.x
o.x

o..
x.o
oo.

ox.
o..
xo.
3
.xo
x..
..o

.oo
o.o
oo.

o.x
.ox
x..
3
o.x
xox
xo.

..x
x.o
xox

xxo
.o.
...
3
...
o..
oox
...

output:

Alice
Bob
Alice
Bob
Alice
Alice
Alice
Bob
Alice
Alice
Alice
Alice
Alice
Alice
Bob
Bob
Bob
Bob
Alice
Alice
Bob
Alice
Alice
Bob
Bob
Bob
Alice
Bob
Bob
Alice
Bob
Alice
Alice
Alice
Alice
Bob
Alice
Alice
Bob
Bob
Bob
Bob
Alice
Alice
Bob
Bob
Bob
Bob
Alice
Bob
Bob
Bob
Alice
Alice
Bob
Bob
Alice
Alice
Alice
Bo...

result:

ok 33333 tokens

Test #9:

score: 0
Accepted
time: 58ms
memory: 5984kb

input:

25000
4
.x.
xx.
.ox

xxo
.x.
xo.

x..
o.x
x.x

o.x
.o.
o..
4
x.x
xoo
.xo

x.o
.o.
.ox

o..
xx.
xx.

x..
x.o
.x.
4
o.o
.x.
..o

..x
..o
.xx

x.x
.x.
..o

.xo
x..
.ox
4
oox
xx.
oox

x..
.xx
.xo

.x.
oo.
.xx

..o
oox
x.x
4
x..
x.x
.x.

.xo
x..
xox

o.o
.x.
x..

..x
.x.
o..
4
oo.
xx.
oxx

xx.
.ox
.ox

x...

output:

Bob
Bob
Bob
Bob
Bob
Bob
Bob
Alice
Alice
Bob
Alice
Alice
Alice
Bob
Bob
Alice
Alice
Alice
Alice
Bob
Alice
Alice
Alice
Alice
Bob
Bob
Bob
Bob
Bob
Bob
Bob
Bob
Alice
Alice
Alice
Alice
Bob
Bob
Bob
Bob
Alice
Bob
Bob
Bob
Alice
Bob
Alice
Bob
Alice
Alice
Bob
Alice
Alice
Alice
Alice
Alice
Bob
Alice
Alice
Bob
Bo...

result:

ok 25000 tokens

Test #10:

score: 0
Accepted
time: 58ms
memory: 6096kb

input:

25000
4
.o.
xo.
.x.

o..
x.x
x.o

x.x
xo.
oxo

o..
xoo
ox.
4
.x.
xo.
o.o

oxo
xo.
xox

.xx
..x
ox.

.ox
.oo
o.x
4
oxo
...
oxx

o.x
.x.
.oo

oox
ox.
..x

xo.
o..
.ox
4
xo.
oxo
x.o

o.x
oo.
.x.

.oo
.xx
x.o

.oo
o..
oox
4
..x
x.o
xoo

oox
..o
.oo

o.o
xo.
x..

..x
oo.
.xo
4
ox.
..x
o..

o.x
...
...

....

output:

Alice
Alice
Bob
Alice
Alice
Alice
Alice
Bob
Bob
Bob
Alice
Alice
Alice
Bob
Bob
Bob
Alice
Alice
Bob
Bob
Bob
Bob
Alice
Bob
Bob
Bob
Alice
Bob
Alice
Bob
Bob
Bob
Alice
Bob
Bob
Alice
Alice
Alice
Alice
Alice
Bob
Bob
Bob
Bob
Alice
Alice
Bob
Alice
Bob
Alice
Bob
Bob
Bob
Alice
Bob
Bob
Bob
Bob
Alice
Bob
Bob
Alic...

result:

ok 25000 tokens

Test #11:

score: 0
Accepted
time: 59ms
memory: 6096kb

input:

25000
4
xo.
o.o
.ox

o.o
.oo
xo.

.xx
oox
xxo

ox.
xo.
.ox
4
x..
.ox
..o

xx.
x.o
o.x

oxo
.xo
..x

o.o
.ox
xo.
4
oxo
o.x
..o

xx.
o.o
.xo

.ox
..x
oo.

.ox
ox.
oo.
4
.o.
o..
.xo

o.o
xx.
...

.x.
ox.
xoo

oxx
x.o
.xx
4
.o.
o..
.xx

.xx
.ox
.xo

xoo
x.x
.xo

xx.
oxx
..o
4
o..
xxo
x.o

oxo
.xx
..x

x...

output:

Alice
Alice
Alice
Bob
Bob
Bob
Bob
Bob
Bob
Bob
Bob
Bob
Bob
Bob
Alice
Bob
Bob
Bob
Bob
Alice
Bob
Alice
Bob
Bob
Alice
Bob
Alice
Bob
Bob
Alice
Alice
Alice
Alice
Bob
Bob
Bob
Bob
Bob
Bob
Bob
Alice
Bob
Bob
Bob
Alice
Bob
Alice
Alice
Alice
Bob
Alice
Bob
Alice
Alice
Alice
Bob
Bob
Alice
Alice
Bob
Bob
Alice
Bob
...

result:

ok 25000 tokens

Test #12:

score: 0
Accepted
time: 59ms
memory: 6096kb

input:

20000
5
xx.
.xx
.o.

x.x
.ox
..o

...
.xx
xx.

.o.
oxo
o..

x..
...
..x
5
..x
.oo
oo.

o..
..o
.oo

.oo
x..
ox.

xox
oxx
...

.xx
.o.
xox
5
.o.
...
x.o

oxo
x.o
...

oxx
x.o
oxo

.xx
oox
xoo

x.x
..o
.ox
5
xxo
.ox
xxo

o..
xxo
x.x

o.o
..o
.xx

.x.
oox
.xo

.o.
.xx
.xx
5
.o.
..x
.xo

.oo
x..
o.o

o....

output:

Bob
Alice
Alice
Bob
Alice
Alice
Alice
Bob
Alice
Alice
Alice
Bob
Bob
Alice
Bob
Bob
Bob
Bob
Bob
Bob
Alice
Bob
Bob
Bob
Bob
Bob
Bob
Alice
Bob
Alice
Bob
Alice
Alice
Alice
Bob
Bob
Alice
Alice
Bob
Bob
Bob
Bob
Alice
Alice
Bob
Alice
Alice
Alice
Alice
Bob
Bob
Bob
Bob
Bob
Bob
Bob
Bob
Alice
Bob
Bob
Bob
Alice
Al...

result:

ok 20000 tokens

Test #13:

score: 0
Accepted
time: 58ms
memory: 6048kb

input:

20000
5
oxx
o..
.oo

o..
xo.
.x.

.o.
oox
xxo

x.o
oo.
xo.

o..
x..
.xo
5
x.o
oxx
xo.

.ox
o.o
xoo

oox
..o
.oo

oxo
xxo
..x

.ox
oxo
.oo
5
..o
o.x
oox

oxo
xo.
.xx

.ox
.xo
..x

.oo
xx.
x.o

xoo
o..
x.x
5
..x
.x.
oox

...
oox
.x.

.o.
ox.
xox

x.o
xo.
.xo

xxo
xox
..o
5
o..
xxo
.oo

..x
xx.
.xo

ox...

output:

Alice
Bob
Bob
Bob
Bob
Alice
Alice
Alice
Alice
Alice
Alice
Alice
Alice
Alice
Alice
Bob
Alice
Bob
Alice
Alice
Bob
Alice
Bob
Alice
Bob
Bob
Alice
Bob
Alice
Bob
Alice
Alice
Alice
Alice
Bob
Alice
Alice
Alice
Alice
Alice
Bob
Bob
Bob
Alice
Bob
Bob
Bob
Bob
Alice
Bob
Alice
Alice
Alice
Alice
Bob
Alice
Bob
Bob
...

result:

ok 20000 tokens

Test #14:

score: 0
Accepted
time: 56ms
memory: 6092kb

input:

20000
5
xo.
..o
.o.

o..
ox.
x.x

..x
xxo
.oo

xo.
..x
xo.

oo.
o.x
x.o
5
xx.
.ox
x..

xo.
xoo
..x

x..
x.o
.o.

ox.
xx.
xo.

.oo
oox
xxo
5
.xo
xoo
xox

...
oo.
.o.

x..
oox
o..

.o.
.xo
...

xo.
o.o
xxo
5
o.x
o.o
..x

oxo
o.x
xxo

oo.
oxx
.o.

.xo
xo.
.ox

.oo
oxx
..x
5
.x.
x.x
x.x

oxo
.xx
x..

o....

output:

Bob
Bob
Alice
Alice
Bob
Alice
Alice
Alice
Alice
Alice
Bob
Alice
Bob
Bob
Bob
Bob
Bob
Bob
Alice
Alice
Bob
Alice
Bob
Bob
Alice
Bob
Bob
Alice
Alice
Alice
Alice
Bob
Bob
Bob
Alice
Alice
Alice
Alice
Alice
Alice
Bob
Alice
Alice
Bob
Bob
Alice
Bob
Alice
Bob
Bob
Bob
Bob
Alice
Alice
Alice
Alice
Alice
Alice
Bob
...

result:

ok 20000 tokens

Test #15:

score: 0
Accepted
time: 57ms
memory: 5968kb

input:

10000
9
o..
x.o
x.o

.ox
x.x
x..

oxo
...
xo.

o..
x..
o.o

.oo
x.x
ox.

...
..o
ox.

...
xxo
..x

.ox
oxo
oo.

oox
.xo
ox.
37
...
..x
...

.x.
..x
xox

oo.
.xx
xxo

.o.
xxo
xox

o.o
..o
oox

..x
ox.
.oo

.x.
xoo
x.o

.xx
xo.
ox.

xxo
x.o
ox.

..x
.oo
o..

x..
..o
x..

xox
o.o
..o

..o
ox.
...

.xx
...

output:

Alice
Alice
Bob
Alice
Alice
Alice
Bob
Alice
Bob
Alice
Bob
Bob
Bob
Alice
Bob
Alice
Alice
Bob
Bob
Bob
Bob
Bob
Alice
Bob
Bob
Alice
Alice
Bob
Alice
Bob
Bob
Alice
Bob
Bob
Bob
Alice
Alice
Alice
Bob
Alice
Bob
Bob
Alice
Bob
Bob
Bob
Bob
Alice
Bob
Bob
Bob
Bob
Bob
Bob
Bob
Bob
Bob
Alice
Alice
Bob
Bob
Bob
Alice
...

result:

ok 10000 tokens

Test #16:

score: 0
Accepted
time: 59ms
memory: 5960kb

input:

1000
387
xo.
xo.
.xo

..x
x.x
.xo

xox
x.o
.ox

x.o
.o.
.o.

x..
.x.
...

oo.
x.x
ox.

o..
xo.
x..

.xo
.x.
.o.

.x.
oxo
.oo

xxo
..x
.x.

o.o
x.x
.x.

oo.
x..
o..

..x
ox.
o.x

o..
.o.
...

xoo
oo.
x..

xoo
.xo
.x.

.oo
oxo
xo.

...
x.x
ox.

xx.
.xo
xo.

o..
o.x
.xx

.xo
.oo
..x

xoo
xxo
...

.ox
o...

output:

Bob
Bob
Alice
Alice
Alice
Alice
Bob
Alice
Alice
Alice
Alice
Bob
Bob
Alice
Alice
Bob
Bob
Bob
Bob
Alice
Alice
Bob
Alice
Alice
Alice
Bob
Bob
Alice
Bob
Alice
Bob
Bob
Alice
Bob
Alice
Bob
Alice
Bob
Bob
Alice
Alice
Alice
Bob
Bob
Bob
Bob
Alice
Alice
Alice
Bob
Alice
Alice
Alice
Bob
Alice
Alice
Bob
Bob
Alice
...

result:

ok 1000 tokens

Test #17:

score: 0
Accepted
time: 58ms
memory: 5812kb

input:

100
2251
.x.
..x
xx.

oo.
ox.
.xx

oo.
x..
o..

.oo
o.o
oox

x..
.ox
..o

oxx
.x.
o.x

o.o
oox
.x.

.oo
...
xx.

x.o
o..
.oo

.xo
xoo
x.x

oo.
...
.ox

..x
oo.
xxo

..x
...
o..

o.x
x.o
xo.

o.o
.oo
.xx

..x
.o.
.oo

oo.
oox
..x

xxo
...
x.o

o..
xo.
...

o..
x.x
x.x

.xo
.xx
o..

..x
x.x
x.o

ox.
x...

output:

Bob
Bob
Alice
Bob
Bob
Alice
Alice
Bob
Bob
Alice
Bob
Alice
Bob
Bob
Alice
Alice
Alice
Alice
Bob
Alice
Bob
Bob
Bob
Bob
Bob
Bob
Alice
Bob
Bob
Bob
Alice
Alice
Alice
Bob
Alice
Bob
Bob
Alice
Alice
Alice
Bob
Bob
Bob
Alice
Alice
Bob
Alice
Bob
Alice
Alice
Bob
Alice
Alice
Bob
Alice
Alice
Bob
Alice
Alice
Bob
Al...

result:

ok 100 tokens

Test #18:

score: 0
Accepted
time: 61ms
memory: 5916kb

input:

10
9468
.xo
o.x
..x

.xx
x..
..o

.xx
x..
o..

xoo
..x
.o.

oxx
..x
xx.

.x.
xoo
o..

.o.
.ox
xx.

o.x
...
oxx

xxo
oxx
oo.

..o
x..
xoo

xo.
.x.
..o

oxo
oxx
x.x

...
xoo
oxx

.xx
o.o
oox

...
.xo
o.x

...
..o
ox.

..o
o.x
xoo

..x
..o
x..

xx.
x.o
.x.

.o.
.xx
oxo

.xo
..x
.x.

x..
xx.
.xo

...
ox...

output:

Alice
Alice
Bob
Alice
Bob
Bob
Alice
Bob
Bob
Bob

result:

ok 10 tokens

Test #19:

score: 0
Accepted
time: 58ms
memory: 5964kb

input:

1
100000
...
.xo
x.x

xx.
oox
o..

o.o
x.o
.ox

.o.
x.x
oxo

..x
x.o
.ox

xx.
.xx
.oo

.xx
x.o
oxo

xxo
.ox
.x.

x.x
.o.
...

.xx
oo.
.xo

..x
o..
..o

oxx
xoo
xox

oxx
xo.
o.x

.ox
o.x
xx.

xxo
x.o
oox

oo.
..x
.xo

xoo
xxo
.o.

.x.
ox.
.ox

oxo
xx.
x.o

oox
o.x
xoo

xox
.o.
o..

xo.
oxo
xx.

oxo
x...

output:

Bob

result:

ok "Bob"

Test #20:

score: 0
Accepted
time: 59ms
memory: 5964kb

input:

10000
10
xx.
.x.
.o.

x.o
oox
xxo

xx.
o..
.xo

xx.
.ox
o.x

.xo
.ox
x..

xx.
xoo
oox

o..
...
oxo

xo.
o..
.ox

.o.
x..
xoo

x.x
o.o
o.o
10
.oo
x.x
ox.

.o.
oox
ox.

o..
oxo
xo.

o..
xo.
.x.

xo.
.x.
.oo

.xx
xx.
...

...
.o.
x..

xoo
o..
o.x

x..
.ox
oxo

.xo
o..
.xx
10
xoo
..x
oxo

o.x
o.o
.o.

....

output:

Bob
Bob
Bob
Bob
Alice
Alice
Alice
Alice
Alice
Bob
Bob
Bob
Bob
Alice
Alice
Bob
Alice
Bob
Bob
Bob
Bob
Bob
Bob
Bob
Alice
Alice
Bob
Alice
Alice
Bob
Bob
Bob
Alice
Bob
Bob
Bob
Bob
Alice
Bob
Alice
Bob
Alice
Bob
Bob
Bob
Bob
Alice
Alice
Alice
Bob
Alice
Alice
Alice
Alice
Alice
Bob
Bob
Bob
Alice
Bob
Bob
Alice
...

result:

ok 10000 tokens

Test #21:

score: 0
Accepted
time: 61ms
memory: 5964kb

input:

1000
100
x.x
.xx
o.o

o.o
xx.
x.x

.o.
oxx
x..

.xo
x..
o..

.ox
x.o
oxx

.x.
x.o
xx.

xx.
.oo
o..

..x
.o.
.ox

o..
..x
.o.

..x
xx.
.xo

x..
o..
xo.

.oo
xxo
oo.

..x
..o
ox.

o.x
xo.
oo.

oo.
.xx
.oo

.o.
x..
..x

...
.o.
...

.xx
x..
..x

xo.
.oo
o..

o.x
...
.xx

o..
ox.
.x.

o.o
.oo
xo.

.xo
x...

output:

Alice
Bob
Alice
Bob
Bob
Alice
Alice
Alice
Alice
Bob
Bob
Bob
Alice
Bob
Bob
Alice
Alice
Alice
Bob
Bob
Alice
Alice
Alice
Bob
Bob
Alice
Alice
Alice
Alice
Alice
Alice
Alice
Bob
Alice
Bob
Alice
Bob
Bob
Alice
Bob
Alice
Alice
Bob
Alice
Bob
Bob
Alice
Alice
Alice
Alice
Alice
Alice
Bob
Bob
Bob
Bob
Bob
Bob
Alic...

result:

ok 1000 tokens

Test #22:

score: 0
Accepted
time: 59ms
memory: 5964kb

input:

100
1000
..o
x..
xo.

xxo
.ox
..o

oox
x.o
xo.

xxo
oox
xo.

.oo
.ox
..o

.ox
...
.ox

..x
xoo
.xx

.oo
.xo
xo.

.x.
...
.oo

ox.
.oo
.xx

o.o
..o
oxx

oxo
o.o
...

oo.
oxx
.o.

..o
x.o
oox

.x.
.xo
o.o

x..
x..
..o

.o.
x.x
x..

x..
.xx
o.o

.xo
.o.
x..

..x
.x.
.x.

.oo
x.x
xxo

xox
..x
x.o

...
o...

output:

Alice
Alice
Bob
Alice
Alice
Alice
Alice
Bob
Alice
Alice
Alice
Alice
Bob
Bob
Bob
Alice
Alice
Bob
Alice
Alice
Alice
Bob
Bob
Bob
Bob
Bob
Alice
Bob
Bob
Bob
Bob
Alice
Bob
Alice
Alice
Alice
Alice
Bob
Alice
Alice
Alice
Alice
Alice
Bob
Bob
Alice
Alice
Bob
Alice
Alice
Bob
Bob
Bob
Alice
Alice
Alice
Bob
Alice
...

result:

ok 100 tokens

Test #23:

score: 0
Accepted
time: 60ms
memory: 5960kb

input:

10
10000
oox
...
x.x

.oo
.xo
xo.

.x.
x.x
x.x

..x
o..
..x

.o.
...
oo.

...
xox
xo.

xoo
.xx
oo.

xxo
oox
xo.

oo.
oxo
.o.

xx.
.oo
xox

.oo
oxx
xxo

.o.
ox.
.o.

o..
.o.
x..

oxx
xx.
oo.

ox.
xo.
.x.

o..
xxo
oxo

o..
...
xx.

..x
oxo
..o

.ox
xo.
xxo

oxx
oo.
.xx

o.o
.oo
x..

...
.o.
..o

o.x
x...

output:

Alice
Alice
Bob
Bob
Alice
Alice
Bob
Bob
Alice
Bob

result:

ok 10 tokens

Test #24:

score: 0
Accepted
time: 62ms
memory: 5960kb

input:

1
100000
..x
xx.
o.o

o.o
oxx
xoo

o..
xx.
.xx

x..
.oo
.xx

x.x
o..
.xo

o..
x..
oxx

...
o..
xx.

xo.
oox
oxo

.xo
o.o
oo.

xox
.o.
xx.

..x
xoo
.oo

xoo
oo.
x..

.xo
x.x
o.x

oox
xo.
.x.

.ox
x.o
.xo

xx.
xoo
o.o

ox.
xox
oo.

x..
.o.
xx.

xoo
.xx
oxo

x.o
o.x
x.o

.xx
x.o
ox.

ox.
x..
.x.

.o.
x...

output:

Bob

result:

ok "Bob"

Test #25:

score: 0
Accepted
time: 62ms
memory: 5964kb

input:

1
100000
xxo
x.x
oo.

xx.
ox.
xoo

.ox
.xo
o..

.x.
x..
x.o

oxx
x.o
ox.

xx.
x..
o.o

o.o
xo.
.x.

xo.
xox
o..

oo.
.xo
xoo

...
xo.
oxx

..o
..o
.x.

..o
xo.
x.o

.oo
xx.
o..

xx.
.ox
oxx

...
xxo
x.x

xxo
o..
xxo

ox.
o.x
xo.

x.x
.xo
.x.

x.x
xo.
...

xxo
oxo
x..

xoo
o..
.xx

.xx
...
.ox

.o.
o...

output:

Bob

result:

ok "Bob"

Test #26:

score: 0
Accepted
time: 61ms
memory: 5964kb

input:

1
100000
.oo
.x.
x.o

oox
..x
x..

x.o
.oo
x.x

xxo
oxx
xoo

.o.
oxo
xoo

.o.
.xo
xo.

..o
.xo
.ox

x.o
oxx
.xo

.oo
o.x
o.o

.o.
o..
x.x

xx.
..o
ox.

..o
x..
.oo

xo.
xo.
..x

.x.
o.x
o..

..o
.oo
.xx

xx.
xo.
..o

x.x
xo.
oxo

...
..x
oo.

xx.
.xo
...

oxo
oo.
x.x

xoo
xox
.xo

oo.
.ox
o.x

...
x...

output:

Alice

result:

ok "Alice"

Test #27:

score: 0
Accepted
time: 58ms
memory: 5792kb

input:

1
100000
.oo
o.x
xoo

xx.
o..
x.x

.xx
xoo
..o

...
o..
.oo

oo.
.o.
o..

o.x
.x.
oxx

.xx
.o.
.o.

o.x
x.o
..o

..o
xoo
xx.

oxo
xx.
..o

.x.
x.o
oox

.o.
.ox
x.x

.xo
x.o
xox

ox.
oo.
...

ox.
.xx
..o

.xo
o..
oo.

.xo
.xx
x.x

...
ox.
x.x

ox.
.x.
.ox

.o.
..x
xox

.o.
.x.
.o.

.o.
xoo
x.x

x..
o...

output:

Alice

result:

ok "Alice"

Test #28:

score: 0
Accepted
time: 57ms
memory: 5820kb

input:

1
100000
xoo
xo.
.xx

.xx
o.o
ox.

.xo
...
o.x

o..
ox.
xoo

oxo
xo.
xox

x..
.x.
oo.

.xx
o..
.o.

.ox
..o
x.o

o.x
...
xxo

.oo
.x.
oox

o..
.x.
ox.

..o
.ox
x..

oxo
..x
.xo

o..
x.x
oxo

.xo
..x
ox.

oox
..x
.xo

xxo
x.o
.o.

.o.
ox.
x.o

..x
.o.
o..

..o
o.x
.x.

o.o
xox
x.x

oox
x.o
xox

x.o
x...

output:

Alice

result:

ok "Alice"

Test #29:

score: 0
Accepted
time: 55ms
memory: 5732kb

input:

1
100000
xox
o.o
oox

xo.
o..
xo.

o.x
o.x
xoo

o.x
ox.
.oo

..o
xx.
..o

xx.
.ox
o..

o..
x.x
...

oox
xxo
o..

..x
o.x
.o.

xoo
..x
o.x

oxx
.x.
.oo

x..
x.o
ox.

..o
..x
xo.

...
.ox
xox

x..
.o.
.xo

oxx
x.o
x.o

..x
.o.
x..

xoo
xxo
ox.

.o.
oxx
...

.o.
o.x
.ox

x..
oox
o.x

o.x
oox
xx.

o.o
o...

output:

Alice

result:

ok "Alice"

Test #30:

score: 0
Accepted
time: 55ms
memory: 5964kb

input:

1
100000
.o.
...
xo.

xx.
.oo
.ox

oox
oo.
x.x

.xo
..x
ox.

xxo
x..
.xo

o.x
.x.
oox

...
ox.
oxo

ox.
o.x
...

o.x
..x
xoo

xo.
..o
.ox

o.o
xoo
x.x

.x.
xo.
oxx

oxx
xox
x..

xox
o.o
.o.

x.o
o.x
oxx

oo.
xxo
xxo

...
.o.
.x.

.o.
ox.
xxo

.ox
x..
oxo

ox.
o.x
.x.

xoo
o.o
oox

xoo
.x.
xxo

oxo
....

output:

Bob

result:

ok "Bob"

Test #31:

score: 0
Accepted
time: 57ms
memory: 5800kb

input:

1
100000
..o
...
.x.

xoo
o.o
..x

..o
xox
x.o

xoo
..o
oox

o..
oxo
x.o

.x.
x.o
xoo

oxx
..o
xo.

xxo
o..
oxx

.xo
o.x
xox

..o
.o.
x..

o..
ox.
xoo

oxo
o.x
xo.

xxo
.xx
.oo

xx.
.x.
.oo

ox.
.x.
.ox

xxo
x..
ox.

.ox
xox
x..

xxo
o.x
ox.

oxo
oxx
..o

x..
..o
.xo

.x.
o.x
o..

xoo
...
o.x

oxx
....

output:

Bob

result:

ok "Bob"

Test #32:

score: 0
Accepted
time: 50ms
memory: 5836kb

input:

1
100000
.xx
.xx
...

x..
.xx
xx.

xx.
xx.
...

.xx
x..
x.x

x.x
x.x
.x.

..x
xx.
.xx

.x.
.xx
x.x

...
xx.
xx.

.xx
xx.
..x

..x
xx.
.xx

..x
xx.
.xx

x.x
x.x
.x.

xx.
..x
xx.

xx.
.xx
x..

.x.
xx.
x.x

x.x
..x
xx.

x.x
...
x.x

.x.
x.x
x.x

...
xx.
xx.

x..
.xx
xx.

x.x
.xx
.x.

x..
.xx
xx.

.x.
x...

output:

Bob

result:

ok "Bob"

Test #33:

score: 0
Accepted
time: 48ms
memory: 5964kb

input:

1
100000
oo.
..o
o.o

.o.
.oo
o.o

o.o
oo.
.o.

o.o
..o
oo.

...
oo.
oo.

.o.
oo.
o.o

o.o
o.o
.o.

o.o
oo.
.o.

.oo
oo.
..o

oo.
oo.
...

o..
.oo
oo.

o..
.oo
oo.

.o.
oo.
o.o

.o.
oo.
o.o

o.o
oo.
.o.

o.o
oo.
.o.

oo.
..o
o.o

oo.
..o
o.o

.oo
.oo
...

.o.
.oo
o.o

oo.
..o
o.o

o.o
.oo
.o.

.oo
o...

output:

Alice

result:

ok "Alice"

Test #34:

score: 0
Accepted
time: 49ms
memory: 5708kb

input:

1
100000
xx.
xx.
...

o.o
..o
oo.

xx.
xx.
...

...
.xx
.xx

x.x
..x
xx.

.x.
x.x
x.x

.xx
.xx
...

o..
.oo
oo.

oo.
..o
o.o

o.o
o..
.oo

o.o
..o
oo.

...
.oo
.oo

..x
xx.
.xx

.o.
o.o
o.o

o.o
o.o
.o.

.xx
x..
.xx

xx.
xx.
...

.oo
.oo
...

.o.
o.o
o.o

.oo
.oo
...

.xx
x..
.xx

o.o
...
o.o

.oo
....

output:

Bob

result:

ok "Bob"

Test #35:

score: 0
Accepted
time: 52ms
memory: 5960kb

input:

1
100000
oxx
.o.
.ox

...
..o
xox

o..
.o.
x.x

oo.
xx.
..o

..x
..o
...

x..
.o.
x.o

.o.
oox
xx.

.xo
.xo
o..

...
o.x
xo.

.x.
oxo
o..

.ox
.ox
ox.

xo.
o..
.x.

o..
xxo
ox.

..o
.o.
x.x

ox.
.ox
.ox

.xo
oxo
...

..x
..o
.ox

x.x
.o.
o..

o..
.o.
x.x

.ox
.ox
ox.

.x.
o..
x.o

.o.
xoo
.xx

.o.
....

output:

Bob

result:

ok "Bob"

Test #36:

score: 0
Accepted
time: 53ms
memory: 5832kb

input:

1
100000
.oo
oxx
x..

oxo
x.o
x..

x..
xox
.o.

oxx
...
ox.

.ox
xoo
..x

oxo
x..
...

...
xox
.ox

x..
.oo
.xx

x..
x.o
oxo

.ox
.ox
x..

.x.
xxo
oo.

o.o
oxx
x..

.x.
.x.
oo.

x..
.x.
.oo

o.o
.x.
..x

...
xox
xo.

xo.
xox
...

oox
.x.
ox.

ox.
...
oxx

..x
xoo
.ox

..o
..x
.xo

oo.
xxo
.x.

.xx
....

output:

Alice

result:

ok "Alice"

Test #37:

score: 0
Accepted
time: 53ms
memory: 5964kb

input:

1
100000
x..
.xo
..o

...
...
xo.

x..
.oo
.xx

.o.
xx.
oo.

xo.
xoo
.x.

x..
o..
xo.

..o
xxo
...

x..
..o
xoo

o..
.x.
o.x

x.x
o..
oo.

oxo
xx.
.o.

.x.
oxo
..o

.ox
...
...

xo.
.xo
.xo

o..
ox.
..x

.x.
oxo
o..

o..
xoo
x.x

xo.
...
...

xoo
x..
.o.

oxo
x..
...

o..
o.x
xox

xox
oo.
.x.

oo.
x...

output:

Bob

result:

ok "Bob"

Extra Test:

score: 0
Extra Test Passed