QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#542151#8939. Permutationucup-team180#RE 162ms3816kbC++2033.9kb2024-08-31 23:02:272024-08-31 23:02:28

Judging History

This is the latest submission verdict.

  • [2024-08-31 23:02:28]
  • Judged
  • Verdict: RE
  • Time: 162ms
  • Memory: 3816kb
  • [2024-08-31 23:02:27]
  • Submitted

answer

#pragma region Macros
#ifdef noimi
#pragma comment(linker, "/stack:256000000")
#include "my_template.hpp"
#else
// #pragma GCC target("avx2")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")

#include <immintrin.h>

#include <algorithm>
#include <array>
#include <bitset>
#include <cassert>
#include <cctype>
#include <cfenv>
#include <cfloat>
#include <chrono>
#include <cinttypes>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdarg>
#include <cstddef>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <fstream>
#include <functional>
#include <immintrin.h>
#include <initializer_list>
#include <iomanip>
#include <ios>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <stack>
#include <streambuf>
#include <string>
#include <tuple>
#include <type_traits>
#include <utility>
#include <variant>

#ifdef noimi
#define oj_local(a, b) b
#else
#define oj_local(a, b) a
#endif

#define LOCAL if(oj_local(0, 1))
#define OJ if(oj_local(1, 0))

using namespace std;
using ll = long long;
using ull = unsigned long long int;
using i128 = __int128_t;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using ld = long double;
template <typename T> using vc = vector<T>;
template <typename T> using vvc = vector<vc<T>>;
template <typename T> using vvvc = vector<vvc<T>>;
using vi = vc<int>;
using vl = vc<ll>;
using vpi = vc<pii>;
using vpl = vc<pll>;
template <class T> using pq = priority_queue<T>;
template <class T> using pqg = priority_queue<T, vector<T>, greater<T>>;
template <typename T> int si(const T &x) { return x.size(); }
template <class T, class S> inline bool chmax(T &a, const S &b) { return (a < b ? a = b, 1 : 0); }
template <class T, class S> inline bool chmin(T &a, const S &b) { return (a > b ? a = b, 1 : 0); }
vi iota(int n) {
    vi a(n);
    return iota(a.begin(), a.end(), 0), a;
}
template <typename T> vi iota(const vector<T> &a, bool greater = false) {
    vi res(a.size());
    iota(res.begin(), res.end(), 0);
    sort(res.begin(), res.end(), [&](int i, int j) {
        if(greater) return a[i] > a[j];
        return a[i] < a[j];
    });
    return res;
}

// macros
#define overload5(a, b, c, d, e, name, ...) name
#define overload4(a, b, c, d, name, ...) name
#define endl '\n'
#define REP0(n) for(ll jidlsjf = 0; jidlsjf < n; ++jidlsjf)
#define REP1(i, n) for(ll i = 0; i < (n); ++i)
#define REP2(i, a, b) for(ll i = (a); i < (b); ++i)
#define REP3(i, a, b, c) for(ll i = (a); i < (b); i += (c))
#define rep(...) overload4(__VA_ARGS__, REP3, REP2, REP1, REP0)(__VA_ARGS__)
#define per0(n) for(int jidlsjf = 0; jidlsjf < (n); ++jidlsjf)
#define per1(i, n) for(ll i = (n) - 1; i >= 0; --i)
#define per2(i, a, b) for(ll i = (a) - 1; i >= b; --i)
#define per3(i, a, b, c) for(ll i = (a) - 1; i >= (b); i -= (c))
#define per(...) overload4(__VA_ARGS__, per3, per2, per1, per0)(__VA_ARGS__)
#define fore0(a) rep(a.size())
#define fore1(i, a) for(auto &&i : a)
#define fore2(a, b, v) for(auto &&[a, b] : v)
#define fore3(a, b, c, v) for(auto &&[a, b, c] : v)
#define fore4(a, b, c, d, v) for(auto &&[a, b, c, d] : v)
#define fore(...) overload5(__VA_ARGS__, fore4, fore3, fore2, fore1, fore0)(__VA_ARGS__)
#define setbits(j, n) for(ll iiiii = (n), j = lowbit(iiiii); iiiii; iiiii ^= 1 << j, j = lowbit(iiiii))
#define perm(v) for(bool permrepflag = true; (permrepflag ? exchange(permrepflag, false) : next_permutation(all(v)));)
#define fi first
#define se second
#define pb push_back
#define ppb pop_back
#define ppf pop_front
#define eb emplace_back
#define drop(s) cout << #s << endl, exit(0)
#define si(c) (int)(c).size()
#define lb(c, x) distance((c).begin(), lower_bound(all(c), (x)))
#define lbg(c, x) distance((c).begin(), lower_bound(all(c), (x), greater{}))
#define ub(c, x) distance((c).begin(), upper_bound(all(c), (x)))
#define ubg(c, x) distance((c).begin(), upper_bound(all(c), (x), greater{}))
#define rng(v, l, r) v.begin() + (l), v.begin() + (r)
#define all(c) begin(c), end(c)
#define rall(c) rbegin(c), rend(c)
#define SORT(v) sort(all(v))
#define REV(v) reverse(all(v))
#define UNIQUE(x) SORT(x), x.erase(unique(all(x)), x.end())
template <typename T = ll, typename S> T SUM(const S &v) { return accumulate(all(v), T(0)); }
#define MIN(v) *min_element(all(v))
#define MAX(v) *max_element(all(v))
#define overload2(_1, _2, name, ...) name
#define vec(type, name, ...) vector<type> name(__VA_ARGS__)
#define vv(type, name, h, ...) vector<vector<type>> name(h, vector<type>(__VA_ARGS__))
#define vvv(type, name, h, w, ...) vector<vector<vector<type>>> name(h, vector<vector<type>>(w, vector<type>(__VA_ARGS__)))
#define vvvv(type, name, a, b, c, ...)                                                                                                                         \
    vector<vector<vector<vector<type>>>> name(a, vector<vector<vector<type>>>(b, vector<vector<type>>(c, vector<type>(__VA_ARGS__))))
constexpr pii dx4[4] = {pii{1, 0}, pii{0, 1}, pii{-1, 0}, pii{0, -1}};
constexpr pii dx8[8] = {{1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1}, {0, -1}, {1, -1}};

namespace yesno_impl {
const string YESNO[2] = {"NO", "YES"};
const string YesNo[2] = {"No", "Yes"};
const string yesno[2] = {"no", "yes"};
const string firstsecond[2] = {"second", "first"};
const string FirstSecond[2] = {"Second", "First"};
const string possiblestr[2] = {"impossible", "possible"};
const string Possiblestr[2] = {"Impossible", "Possible"};
void YES(bool t = 1) { cout << YESNO[t] << endl; }
void NO(bool t = 1) { YES(!t); }
void Yes(bool t = 1) { cout << YesNo[t] << endl; }
void No(bool t = 1) { Yes(!t); }
void yes(bool t = 1) { cout << yesno[t] << endl; }
void no(bool t = 1) { yes(!t); }
void first(bool t = 1) { cout << firstsecond[t] << endl; }
void First(bool t = 1) { cout << FirstSecond[t] << endl; }
void possible(bool t = 1) { cout << possiblestr[t] << endl; }
void Possible(bool t = 1) { cout << Possiblestr[t] << endl; }
}; // namespace yesno_impl
using namespace yesno_impl;

#define INT(...)                                                                                                                                               \
    int __VA_ARGS__;                                                                                                                                           \
    IN(__VA_ARGS__)
#define INTd(...)                                                                                                                                              \
    int __VA_ARGS__;                                                                                                                                           \
    IN2(__VA_ARGS__)
#define LL(...)                                                                                                                                                \
    ll __VA_ARGS__;                                                                                                                                            \
    IN(__VA_ARGS__)
#define LLd(...)                                                                                                                                               \
    ll __VA_ARGS__;                                                                                                                                            \
    IN2(__VA_ARGS__)
#define STR(...)                                                                                                                                               \
    string __VA_ARGS__;                                                                                                                                        \
    IN(__VA_ARGS__)
#define CHR(...)                                                                                                                                               \
    char __VA_ARGS__;                                                                                                                                          \
    IN(__VA_ARGS__)
#define DBL(...)                                                                                                                                               \
    double __VA_ARGS__;                                                                                                                                        \
    IN(__VA_ARGS__)
#define VEC(type, name, size)                                                                                                                                  \
    vector<type> name(size);                                                                                                                                   \
    IN(name)
#define VECd(type, name, size)                                                                                                                                 \
    vector<type> name(size);                                                                                                                                   \
    IN2(name)
#define VEC2(type, name1, name2, size)                                                                                                                         \
    vector<type> name1(size), name2(size);                                                                                                                     \
    for(int i = 0; i < size; i++) IN(name1[i], name2[i])
#define VEC2d(type, name1, name2, size)                                                                                                                        \
    vector<type> name1(size), name2(size);                                                                                                                     \
    for(int i = 0; i < size; i++) IN2(name1[i], name2[i])
#define VEC3(type, name1, name2, name3, size)                                                                                                                  \
    vector<type> name1(size), name2(size), name3(size);                                                                                                        \
    for(int i = 0; i < size; i++) IN(name1[i], name2[i], name3[i])
#define VEC3d(type, name1, name2, name3, size)                                                                                                                 \
    vector<type> name1(size), name2(size), name3(size);                                                                                                        \
    for(int i = 0; i < size; i++) IN2(name1[i], name2[i], name3[i])
#define VEC4(type, name1, name2, name3, name4, size)                                                                                                           \
    vector<type> name1(size), name2(size), name3(size), name4(size);                                                                                           \
    for(int i = 0; i < size; i++) IN(name1[i], name2[i], name3[i], name4[i]);
#define VEC4d(type, name1, name2, name3, name4, size)                                                                                                          \
    vector<type> name1(size), name2(size), name3(size), name4(size);                                                                                           \
    for(int i = 0; i < size; i++) IN2(name1[i], name2[i], name3[i], name4[i]);
#define VV(type, name, h, w)                                                                                                                                   \
    vector<vector<type>> name(h, vector<type>(w));                                                                                                             \
    IN(name)
#define VVd(type, name, h, w)                                                                                                                                  \
    vector<vector<type>> name(h, vector<type>(w));                                                                                                             \
    IN2(name)
int scan() { return getchar(); }
void scan(int &a) { cin >> a; }
void scan(long long &a) { cin >> a; }
void scan(char &a) { cin >> a; }
void scan(double &a) { cin >> a; }
void scan(string &a) { cin >> a; }
template <class T, class S> void scan(pair<T, S> &p) { scan(p.first), scan(p.second); }
template <class T> void scan(vector<T> &);
template <class T> void scan(vector<T> &a) {
    for(auto &i : a) scan(i);
}
template <class T> void scan(T &a) { cin >> a; }
void IN() {}
void IN2() {}
template <class Head, class... Tail> void IN(Head &head, Tail &...tail) {
    scan(head);
    IN(tail...);
}
template <class Head, class... Tail> void IN2(Head &head, Tail &...tail) {
    scan(head);
    --head;
    IN2(tail...);
}

template <int p = -1> void pat() {}
template <int p = -1, class Head, class... Tail> void pat(Head &h, Tail &...tail) {
    h += p;
    pat<p>(tail...);
}

template <typename T, typename S> T ceil(T x, S y) {
    assert(y);
    return (y < 0 ? ceil(-x, -y) : (x > 0 ? (x + y - 1) / y : x / y));
}

template <typename T, typename S> T floor(T x, S y) {
    assert(y);
    return (y < 0 ? floor(-x, -y) : (x > 0 ? x / y : x / y - (x % y == 0 ? 0 : 1)));
}
template <typename T, typename S, typename U> U bigmul(const T &x, const S &y, const U &lim) { // clamp(x * y, -lim, lim)
    if(x < 0 and y < 0) return bigmul(-x, -y, lim);
    if(x < 0) return -bigmul(-x, y, lim);
    if(y < 0) return -bigmul(x, -y, lim);
    return y == 0 or x <= lim / y ? x * y : lim;
}
template <class T> T POW(T x, int n) {
    T res = 1;
    for(; n; n >>= 1, x *= x)
        if(n & 1) res *= x;
    return res;
}
template <class T, class S> T POW(T x, S n, const ll &mod) {
    T res = 1;
    x %= mod;
    for(; n; n >>= 1, x = x * x % mod)
        if(n & 1) res = res * x % mod;
    return res;
}
vector<pll> factor(ll x) {
    vector<pll> ans;
    for(ll i = 2; i * i <= x; i++)
        if(x % i == 0) {
            ans.push_back({i, 1});
            while((x /= i) % i == 0) ans.back().second++;
        }
    if(x != 1) ans.push_back({x, 1});
    return ans;
}
template <class T> vector<T> divisor(T x) {
    vector<T> ans;
    for(T i = 1; i * i <= x; i++)
        if(x % i == 0) {
            ans.pb(i);
            if(i * i != x) ans.pb(x / i);
        }
    return ans;
}
template <typename T> void zip(vector<T> &x) {
    vector<T> y = x;
    UNIQUE(y);
    for(int i = 0; i < x.size(); ++i) { x[i] = lb(y, x[i]); }
}
template <class S> void fold_in(vector<S> &v) {}
template <typename Head, typename... Tail, class S> void fold_in(vector<S> &v, Head &&a, Tail &&...tail) {
    for(auto e : a) v.emplace_back(e);
    fold_in(v, tail...);
}
template <class S> void renumber(vector<S> &v) {}
template <typename Head, typename... Tail, class S> void renumber(vector<S> &v, Head &&a, Tail &&...tail) {
    for(auto &&e : a) e = lb(v, e);
    renumber(v, tail...);
}
template <class S, class... Args> vector<S> zip(vector<S> &head, Args &&...args) {
    vector<S> v;
    fold_in(v, head, args...);
    sort(all(v)), v.erase(unique(all(v)), v.end());
    renumber(v, head, args...);
    return v;
}

template <typename S> void rearrange(const vector<S> &id) {}
template <typename S, typename T> void rearrange_exec(const vector<S> &id, vector<T> &v) {
    vector<T> w(v.size());
    rep(i, si(id)) w[i] = v[id[i]];
    v.swap(w);
}
// 並び替える順番, 並び替える vector 達
template <typename S, typename Head, typename... Tail> void rearrange(const vector<S> &id, Head &a, Tail &...tail) {
    rearrange_exec(id, a);
    rearrange(id, tail...);
}

template <typename T> vector<T> RUI(const vector<T> &v) {
    vector<T> res(v.size() + 1);
    for(int i = 0; i < v.size(); i++) res[i + 1] = res[i] + v[i];
    return res;
}
template <typename T> void zeta_supersetsum(vector<T> &f) {
    int n = f.size();
    for(int i = 1; i < n; i <<= 1) rep(b, n) if(!(i & b)) f[b] += f[b | i];
}

template <typename T> void zeta_subsetsum(vector<T> &f) {
    int n = f.size();
    for(int i = 1; i < n; i <<= 1) rep(b, n) if(!(i & b)) f[b | i] += f[b];
}
template <typename T> void mobius_subset(vector<T> &f) {
    int n = f.size();
    for(int i = 1; i < n; i <<= 1) rep(b, n) if(!(i & b)) f[b] -= f[b | i];
}
template <typename T> void mobius_superset(vector<T> &f) {
    int n = f.size();
    for(int i = 1; i < n; i <<= 1) rep(b, n) if(!(i & b)) f[b | i] -= f[b];
}
// 反時計周りに 90 度回転
template <typename T> void rot(vector<vector<T>> &v) {
    if(empty(v)) return;
    int n = v.size(), m = v[0].size();
    vector<vector<T>> res(m, vector<T>(n));
    rep(i, n) rep(j, m) res[m - 1 - j][i] = v[i][j];
    v.swap(res);
}

vector<int> counter(const vector<int> &v, int max_num = -1) {
    if(max_num == -1) max_num = MAX(v);
    vector<int> res(max_num + 1);
    fore(e, v) res[e]++;
    return res;
}

// x in [l, r)
template <class T, class S> bool inc(const T &x, const S &l, const S &r) { return l <= x and x < r; }
template <class T, class S> bool inc(const T &x, const pair<S, S> &p) { return p.first <= x and x < p.second; }

// 便利関数
constexpr ll ten(int n) { return n == 0 ? 1 : ten(n - 1) * 10; }
constexpr ll tri(ll n) { return n * (n + 1) / 2; }
// l + ... + r
constexpr ll tri(ll l, ll r) { return (l + r) * (r - l + 1) / 2; }
ll max(int x, ll y) { return max((ll)x, y); }
ll max(ll x, int y) { return max(x, (ll)y); }
int min(int x, ll y) { return min((ll)x, y); }
int min(ll x, int y) { return min(x, (ll)y); }
// bit 演算系
#define bit(i) (1LL << i)       // (1 << i)
#define test(b, i) (b >> i & 1) // b の i bit 目が立っているか
ll pow2(int i) { return 1LL << i; }
int topbit(signed t) { return t == 0 ? -1 : 31 - __builtin_clz(t); }
int topbit(ll t) { return t == 0 ? -1 : 63 - __builtin_clzll(t); }
// int lowbit(signed a) { return a == 0 ? 32 : __builtin_ctz(a); }
int lowbit(ull a) { return a == 0 ? 64 : __builtin_ctzll(a); }
// int allbit(int n) { return (1 << n) - 1; }
constexpr ll mask(int n) { return (1LL << n) - 1; }
// int popcount(signed t) { return __builtin_popcount(t); }
// int popcount(ll t) { return __builtin_popcountll(t); }
int popcount(uint64_t t) { return __builtin_popcountll(t); }
static inline uint64_t popcount64(uint64_t x) {
    uint64_t m1 = 0x5555555555555555ll;
    uint64_t m2 = 0x3333333333333333ll;
    uint64_t m4 = 0x0F0F0F0F0F0F0F0Fll;
    uint64_t h01 = 0x0101010101010101ll;

    x -= (x >> 1) & m1;
    x = (x & m2) + ((x >> 2) & m2);
    x = (x + (x >> 4)) & m4;

    return (x * h01) >> 56;
}
bool ispow2(int i) { return i && (i & -i) == i; }

ll rnd(ll l, ll r) { //[l, r)
#ifdef noimi
    static mt19937_64 gen;
#else
    static mt19937_64 gen(chrono::steady_clock::now().time_since_epoch().count());
#endif
    return uniform_int_distribution<ll>(l, r - 1)(gen);
}
ll rnd(ll n) { return rnd(0, n); }

template <class t> void random_shuffle(vc<t> &a) { rep(i, si(a)) swap(a[i], a[rnd(0, i + 1)]); }

int in() {
    int x;
    cin >> x;
    return x;
}
ll lin() {
    unsigned long long x;
    cin >> x;
    return x;
}

template <class T, class S> pair<T, S> operator-(const pair<T, S> &x) { return pair<T, S>(-x.first, -x.second); }
template <class T, class S> pair<T, S> operator-(const pair<T, S> &x, const pair<T, S> &y) { return pair<T, S>(x.fi - y.fi, x.se - y.se); }
template <class T, class S> pair<T, S> operator+(const pair<T, S> &x, const pair<T, S> &y) { return pair<T, S>(x.fi + y.fi, x.se + y.se); }
template <class T> pair<T, T> operator&(const pair<T, T> &l, const pair<T, T> &r) { return pair<T, T>(max(l.fi, r.fi), min(l.se, r.se)); }
template <class T, class S> pair<T, S> operator+=(pair<T, S> &l, const pair<T, S> &r) { return l = l + r; }
template <class T, class S> pair<T, S> operator-=(pair<T, S> &l, const pair<T, S> &r) { return l = l - r; }
// 開閉
template <class T> bool intersect(const pair<T, T> &l, const pair<T, T> &r) { return (l.se < r.se ? r.fi < l.se : l.fi < r.se); }

template <class T> vector<T> &operator++(vector<T> &v) {
    fore(e, v) e++;
    return v;
}
template <class T> vector<T> operator++(vector<T> &v, int) {
    auto res = v;
    fore(e, v) e++;
    return res;
}
template <class T> vector<T> &operator--(vector<T> &v) {
    fore(e, v) e--;
    return v;
}
template <class T> vector<T> operator--(vector<T> &v, int) {
    auto res = v;
    fore(e, v) e--;
    return res;
}
template <class T> void connect(vector<T> &l, const vector<T> &r) { fore(e, r) l.eb(e); }
template <class T> vector<T> operator+(const vector<T> &l, const vector<T> &r) {
    vector<T> res(max(si(l), si(r)));
    rep(i, si(l)) res[i] += l[i];
    rep(i, si(r)) res[i] += r[i];
    return res;
}
template <class T> vector<T> operator-(const vector<T> &l, const vector<T> &r) {
    vector<T> res(max(si(l), si(r)));
    rep(i, si(l)) res[i] += l[i];
    rep(i, si(r)) res[i] -= r[i];
    return res;
}
template <class T> vector<T> &operator+=(const vector<T> &l, const vector<T> &r) {
    if(si(l) < si(r)) l.resize(si(r));
    rep(i, si(r)) l[i] += r[i];
    return l;
}
template <class T> vector<T> &operator-=(const vector<T> &l, const vector<T> &r) {
    if(si(l) < si(r)) l.resize(si(r));
    rep(i, si(r)) l[i] -= r[i];
    return l;
}
template <class T> vector<T> &operator+=(vector<T> &v, const T &x) {
    fore(e, v) e += x;
    return v;
}
template <class T> vector<T> &operator-=(vector<T> &v, const T &x) {
    fore(e, v) e -= x;
    return v;
}

template <typename T> struct edge {
    int from, to;
    T cost;
    int id;
    edge(int to, T cost) : from(-1), to(to), cost(cost) {}
    edge(int from, int to, T cost) : from(from), to(to), cost(cost) {}
    edge(int from, int to, T cost, int id) : from(from), to(to), cost(cost), id(id) {}
    constexpr bool operator<(const edge<T> &rhs) const noexcept { return cost < rhs.cost; }
    edge &operator=(const int &x) {
        to = x;
        return *this;
    }
    operator int() const { return to; }
    friend ostream operator<<(ostream &os, const edge &e) { return os << e.to; }
};
template <typename T> using Edges = vector<edge<T>>;

template <typename T = int> Edges<T> read_edges(int m, bool weighted = false) {
    Edges<T> res;
    res.reserve(m);
    for(int i = 0; i < m; i++) {
        int u, v, c = 0;
        scan(u), scan(v), u--, v--;
        if(weighted) scan(c);
        res.eb(u, v, c, i);
    }
    return res;
}

using Tree = vector<vector<int>>;
using Graph = vector<vector<int>>;
template <class T> using Wgraph = vector<vector<edge<T>>>;
Graph getG(int n, int m = -1, bool directed = false, int margin = 1) {
    Tree res(n);
    if(m == -1) m = n - 1;
    while(m--) {
        int a, b;
        cin >> a >> b;
        a -= margin, b -= margin;
        res[a].emplace_back(b);
        if(!directed) res[b].emplace_back(a);
    }
    return res;
}
Graph getTreeFromPar(int n, int margin = 1) {
    Graph res(n);
    for(int i = 1; i < n; i++) {
        int a;
        cin >> a;
        res[a - margin].emplace_back(i);
    }
    return res;
}
template <class T> Wgraph<T> getWg(int n, int m = -1, bool directed = false, int margin = 1) {
    Wgraph<T> res(n);
    if(m == -1) m = n - 1;
    while(m--) {
        int a, b;
        T c;
        scan(a), scan(b), scan(c);
        a -= margin, b -= margin;
        res[a].emplace_back(b, c);
        if(!directed) res[b].emplace_back(a, c);
    }
    return res;
}
void add(Graph &G, int x, int y) { G[x].eb(y), G[y].eb(x); }
template <class S, class T> void add(Wgraph<S> &G, int x, int y, T c) { G[x].eb(y, c), G[y].eb(x, c); }

#define TEST                                                                                                                                                   \
    INT(testcases);                                                                                                                                            \
    while(testcases--)

i128 abs(const i128 &x) { return x > 0 ? x : -x; }
istream &operator>>(istream &is, i128 &v) {
    string s;
    is >> s;
    v = 0;
    for(int i = 0; i < (int)s.size(); i++) {
        if(isdigit(s[i])) { v = v * 10 + s[i] - '0'; }
    }
    if(s[0] == '-') { v *= -1; }
    return is;
}

ostream &operator<<(ostream &os, const i128 &v) {
    if(v == 0) { return (os << "0"); }
    i128 num = v;
    if(v < 0) {
        os << '-';
        num = -num;
    }
    string s;
    for(; num > 0; num /= 10) { s.push_back((char)(num % 10) + '0'); }
    reverse(s.begin(), s.end());
    return (os << s);
}
namespace aux {
template <typename T, unsigned N, unsigned L> struct tp {
    static void output(std::ostream &os, const T &v) {
        os << std::get<N>(v) << (&os == &cerr ? ", " : " ");
        tp<T, N + 1, L>::output(os, v);
    }
};
template <typename T, unsigned N> struct tp<T, N, N> {
    static void output(std::ostream &os, const T &v) { os << std::get<N>(v); }
};
} // namespace aux
template <typename... Ts> std::ostream &operator<<(std::ostream &os, const std::tuple<Ts...> &t) {
    if(&os == &cerr) { os << '('; }
    aux::tp<std::tuple<Ts...>, 0, sizeof...(Ts) - 1>::output(os, t);
    if(&os == &cerr) { os << ')'; }
    return os;
}
template <typename T, typename S, typename U> std::ostream &operator<<(std::ostream &os, const priority_queue<T, S, U> &_pq) {
    auto pq = _pq;
    vector<T> res;
    while(!empty(pq)) res.emplace_back(pq.top()), pq.pop();
    return os << res;
}
template <class T, class S> ostream &operator<<(ostream &os, const pair<T, S> &p) {
    if(&os == &cerr) { return os << "(" << p.first << ", " << p.second << ")"; }
    return os << p.first << " " << p.second;
}
template <class Ch, class Tr, class Container> std::basic_ostream<Ch, Tr> &operator<<(std::basic_ostream<Ch, Tr> &os, const Container &x) {
    bool f = true;
    if(&os == &cerr) os << "[";
    for(auto &y : x) {
        if(&os == &cerr)
            os << (f ? "" : ", ") << y;
        else
            os << (f ? "" : " ") << y;
        f = false;
    }
    if(&os == &cerr) os << "]";
    return os;
}

#define dump(...) static_cast<void>(0)
#define dbg(...) static_cast<void>(0)

void OUT() { cout << endl; }
template <class Head, class... Tail> void OUT(const Head &head, const Tail &...tail) {
    cout << head;
    if(sizeof...(tail)) cout << ' ';
    OUT(tail...);
}

template <typename T> static constexpr T inf = numeric_limits<T>::max() / 2;
template <class T, class S> constexpr pair<T, S> inf<pair<T, S>> = {inf<T>, inf<S>};

template <class T> void OUT2(const T &t, T INF = inf<T>, T res = -1) { OUT(t != INF ? t : res); }
template <class T> void OUT2(vector<T> &v, T INF = inf<T>, T res = -1) {
    fore(e, v) if(e == INF) e = res;
    OUT(v);
    fore(e, v) if(e == res) e = INF;
}

template <class F> struct REC {
    F f;
    REC(F &&f_) : f(forward<F>(f_)) {}
    template <class... Args> auto operator()(Args &&...args) const { return f(*this, forward<Args>(args)...); }
};

template <class S> vector<pair<S, int>> runLength(const vector<S> &v) {
    vector<pair<S, int>> res;
    for(auto &e : v) {
        if(res.empty() or res.back().fi != e)
            res.eb(e, 1);
        else
            res.back().se++;
    }
    return res;
}
vector<pair<char, int>> runLength(const string &v) {
    vector<pair<char, int>> res;
    for(auto &e : v) {
        if(res.empty() or res.back().fi != e)
            res.eb(e, 1);
        else
            res.back().se++;
    }
    return res;
}

struct string_converter {
    char start = 0;
    char type(const char &c) const { return (islower(c) ? 'a' : isupper(c) ? 'A' : isdigit(c) ? '0' : 0); }
    int convert(const char &c) {
        if(!start) start = type(c);
        return c - start;
    }
    int convert(const char &c, const string &chars) { return chars.find(c); }
    template <typename T> auto convert(const T &v) {
        vector<decltype(convert(v[0]))> ret;
        ret.reserve(size(v));
        for(auto &&e : v) ret.emplace_back(convert(e));
        return ret;
    }
    template <typename T> auto convert(const T &v, const string &chars) {
        vector<decltype(convert(v[0], chars))> ret;
        ret.reserve(size(v));
        for(auto &&e : v) ret.emplace_back(convert(e, chars));
        return ret;
    }
    int operator()(const char &v, char s = 0) {
        start = s;
        return convert(v);
    }
    int operator()(const char &v, const string &chars) { return convert(v, chars); }
    template <typename T> auto operator()(const T &v, char s = 0) {
        start = s;
        return convert(v);
    }
    template <typename T> auto operator()(const T &v, const string &chars) { return convert(v, chars); }
} toint;

template <class T, class F> T bin_search(T ok, T ng, const F &f) {
    while(abs(ok - ng) > 1) {
        T mid = ok + ng >> 1;
        (f(mid) ? ok : ng) = mid;
    }
    return ok;
}
template <class T, class F> T bin_search_double(T ok, T ng, const F &f, int iter = 80) {
    while(iter--) {
        T mid = (ok + ng) / 2;
        (f(mid) ? ok : ng) = mid;
    }
    return ok;
}

struct Setup_io {
    Setup_io() {
        ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
        cout << fixed << setprecision(11);
    }
} setup_io;

#endif

#pragma endregion

int main() {
    TEST {
        int n;

        vi a;
        LOCAL {
            n = rnd(1, 100);
            a = iota(n);
            random_shuffle(a);
            dump(n, a);
        }
        else { cin >> n; }
        int c = 0;
        int sum = 0;
        auto ask = [&](int l, int r) {
            if(r - l <= 1) return -1;
            sum += r - l;
            c++;
            OUT("?", l + 1, r);
            cout.flush();

            LOCAL {
                vpi v;
                rep(i, l, r) v.eb(a[i], i);
                SORT(v);
                dump(v.end()[-2].se);
                return v.end()[-2].se;
            }
            return in() - 1;
        };
        auto ans = [&](int i) {
            dump(sum);
            LOCAL {
                assert(i == (max_element(all(a)) - begin(a)));
                assert(c <= ceil(log2l(n) * 1.5));
                assert(n * 3 >= sum);
            }
            else {
                if(sum > n * 3) rep(inf<int>) OUT(1);
            }
            OUT("!", i + 1);
            cout.flush();
        };

        REC([&](auto &&f, int l, int r, int k = -1) -> void {
            dump(l, r, k);
            if(r - l == 1) {
                ans(l);
                return;
            }
            if(k != -1) {
                if(r - l == 2) {
                    ans(l ^ (l + 1) ^ k);
                    return;
                }
                int mid = l + r >> 1;
                if(k < mid) {
                    if(ask(l, mid) == k)
                        f(l, mid, k);
                    else
                        f(mid, r);
                } else {
                    if(ask(mid, r) == k)
                        f(mid, r, k);
                    else
                        f(l, mid);
                }
                return;
            }
            if(r - l == 2) {
                ans(l ^ (l + 1) ^ ask(l, r));
            } else if(r - l == 3) {
                int x = ask(l, r);
                if(x <= l + 1) {
                    if(x == ask(l, l + 2))
                        ans(l ^ (l + 1) ^ x);
                    else
                        ans(l + 2);
                } else {
                    if(x == ask(l + 1, l + 3))
                        ans((l + 1) ^ (l + 2) ^ x);
                    else { ans(l); }
                }
                return;
            } else {
                vi v;
                vi w;
                rep(i, 4) w.eb((r - l + i) / 4);
                v.eb(l);
                SORT(w);
                REV(w);
                w.eb(w.front());
                w.erase(begin(w));
                fore(e, w) v.eb(v.back() + e);
                auto g = [&](int i) {
                    rep(j, 1, si(v)) {
                        if(i < v[j]) return j - 1;
                    }
                };
                dump(v);

                int x = ask(l, r);
                int xp = g(x);

                if(xp == 0) {
                    v = vi(rng(v, 0, 1));
                    SORT(w);
                    // REV(w);
                    fore(e, w) v.eb(v.back() + e);

                    int y = ask(v[0], v[2]);
                    if(x == y)
                        f(v[0], v[2], x);
                    else {
                        if(x == ask(v[0], v[3])) {
                            f(v[2], v[3]);
                        } else {
                            f(v[3], v[4]);
                        }
                    }
                } else if(xp <= 2) {
                    if(ask(v[1], v[3]) == x) {
                        f(v[1], v[3], x);
                    } else {
                        if(x == ask(v[0], v[3])) {
                            f(v[0], v[1]);
                        } else {
                            f(v[3], v[4]);
                        }
                    }
                } else {
                    SORT(w);
                    REV(w);
                    v.resize(1);
                    fore(e, w) v.eb(v.back() + e);
                    if(ask(v[2], v[4]) == x) {
                        f(v[2], v[4], x);
                    } else {
                        if(ask(v[1], v[4]) == x) {
                            f(v[1], v[2]);
                        } else {
                            f(v[0], v[1]);
                        }
                    }
                }
            }
        })
        (0, n);
    }
}

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 3648kb

input:

3
5
3
2
2
5
6
6
5
3
1
4
3
2
2

output:

? 1 5
? 2 3
? 1 3
? 4 5
! 4
? 1 6
? 5 6
? 3 6
? 1 2
! 2
? 1 4
? 2 3
? 1 3
! 4

result:

ok Correct (3 test cases)

Test #2:

score: 0
Accepted
time: 82ms
memory: 3556kb

input:

10000
10
2
2
1
3
10
10
7
10
5
4
10
5
5
4
6
10
4
6
4
2
1
10
10
9
6
3
2
10
3
3
4
2
10
1
4
5
9
9
10
1
3
1
5
6
10
2
4
4
9
8
10
3
3
3
10
4
7
7
8
9
10
8
7
7
1
2
10
4
5
1
9
8
10
7
7
6
4
10
5
7
1
8
8
10
8
8
7
9
10
2
1
2
7
7
10
6
4
4
10
10
10
1
3
1
5
6
10
7
5
7
1
2
10
7
4
7
1
2
10
3
4
4
10
10
10
4
4
4
10
8
7...

output:

? 1 10
? 1 4
? 1 2
? 3 4
! 4
? 1 10
? 7 10
? 4 10
? 4 6
? 4 5
! 6
? 1 10
? 4 7
? 4 5
? 6 7
! 7
? 1 10
? 4 7
? 1 7
? 1 3
? 1 2
! 3
? 1 10
? 7 10
? 4 10
? 1 3
? 2 3
! 1
? 1 10
? 1 4
? 3 4
? 1 2
! 1
? 1 10
? 1 4
? 1 7
? 8 10
? 8 9
! 8
? 1 10
? 1 4
? 1 7
? 5 7
? 5 6
! 7
? 1 10
? 1 4
? 1 7
? 8 10
? 8 9
!...

result:

ok Correct (10000 test cases)

Test #3:

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

input:

10000
3
1
2
11
5
5
4
8
7
2
2
19
3
4
3
13
14
12
11
7
5
5
4
3
3
3
19
6
10
6
1
2
1
2
2
15
11
11
11
10
8
14
1
1
3
5
5
16
4
4
1
8
7
8
3
3
2
19
13
6
13
5
4
5
2
2
4
1
2
3
7
2
2
3
3
2
2
17
1
1
2
8
7
6
14
9
9
9
9
20
9
9
6
13
13
6
4
3
2
5
18
7
7
7
6
9
8
8
6
8
3
8
6
6
5
3
16
10
10
10
10
6
1
2
1
3
10
3
4
3
6
6
...

output:

? 1 3
? 1 2
! 3
? 1 11
? 4 8
? 4 5
? 6 8
? 7 8
! 6
? 1 2
! 1
? 1 19
? 1 9
? 1 14
? 10 14
? 13 14
? 12 14
? 10 11
! 10
? 1 7
? 3 5
? 4 5
! 3
? 1 3
? 2 3
! 2
? 1 19
? 6 14
? 1 14
? 1 5
? 1 2
? 1 3
! 3
? 1 2
! 1
? 1 15
? 5 11
? 8 11
? 10 11
? 8 9
! 9
? 1 14
? 1 6
? 1 3
? 4 6
? 4 5
! 4
? 1 16
? 1 8
? 1 ...

result:

ok Correct (10000 test cases)

Test #4:

score: 0
Accepted
time: 88ms
memory: 3568kb

input:

10000
47
23
31
23
11
9
11
5
5
14
8
8
8
9
25
6
12
6
13
13
7
4
4
4
9
2
2
2
27
27
27
27
24
21
21
21
7
6
7
5
5
43
41
37
21
7
8
7
3
3
22
6
4
14
20
19
17
21
34
29
25
29
17
17
18
16
42
20
20
20
20
19
17
47
21
21
21
21
22
19
19
41
25
30
30
33
34
33
36
36
19
17
17
16
12
13
12
21
14
14
14
15
11
27
2
1
2
17
16...

output:

? 1 47
? 13 35
? 1 35
? 1 12
? 7 12
? 4 12
? 4 6
? 4 5
! 4
? 1 14
? 5 10
? 8 10
? 9 10
! 10
? 1 25
? 1 12
? 1 18
? 13 18
? 13 14
! 14
? 1 7
? 3 5
? 4 5
! 5
? 1 9
? 1 4
? 1 2
! 1
? 1 27
? 15 27
? 21 27
? 24 27
? 21 23
? 21 22
! 22
? 1 21
? 6 15
? 1 15
? 1 5
? 4 5
! 4
? 1 43
? 23 43
? 12 43
? 1 11
? 4...

result:

ok Correct (10000 test cases)

Test #5:

score: 0
Accepted
time: 153ms
memory: 3608kb

input:

10000
100
47
47
48
61
68
68
71
72
71
69
9
2
2
1
4
53
46
35
15
6
6
6
7
33
3
16
16
31
31
30
32
82
60
60
42
29
36
29
23
24
24
26
88
39
39
25
59
59
59
59
60
71
24
29
29
59
59
59
60
61
92
52
45
45
88
88
88
89
91
91
24
11
9
11
5
6
5
3
66
51
51
66
45
45
43
39
40
39
92
43
50
43
20
20
20
20
19
48
1
1
1
5
9
1...

output:

? 1 100
? 26 75
? 26 50
? 51 75
? 57 68
? 51 68
? 69 75
? 71 73
? 69 73
? 69 70
! 70
? 1 9
? 1 4
? 1 2
? 3 4
! 3
? 1 53
? 28 53
? 15 53
? 1 14
? 5 10
? 5 7
? 6 7
! 5
? 1 33
? 1 16
? 1 24
? 25 33
? 30 33
? 30 31
? 32 33
! 33
? 1 82
? 22 61
? 42 61
? 22 41
? 27 36
? 22 36
? 22 26
? 23 24
? 22 24
? 25 ...

result:

ok Correct (10000 test cases)

Test #6:

score: 0
Accepted
time: 99ms
memory: 3508kb

input:

10000
50
10
10
10
7
2
1
2
3
50
11
11
9
18
16
16
23
22
50
44
40
44
20
21
21
26
25
26
50
24
14
14
45
41
40
49
48
49
50
50
50
50
50
49
47
47
50
36
23
36
12
12
11
8
8
50
29
20
29
13
12
6
3
2
1
50
30
22
30
1
1
1
2
50
25
25
15
30
31
30
27
26
50
18
20
20
49
47
47
39
40
39
50
9
9
9
9
7
11
10
50
26
26
34
17
...

output:

? 1 50
? 1 24
? 1 12
? 7 12
? 1 6
? 1 2
? 1 4
? 3 4
! 4
? 1 50
? 1 24
? 1 12
? 13 24
? 16 21
? 13 21
? 22 24
? 22 23
! 24
? 1 50
? 27 50
? 14 50
? 14 26
? 17 22
? 14 22
? 23 26
? 25 26
? 24 26
! 24
? 1 50
? 14 37
? 1 37
? 38 50
? 41 46
? 38 46
? 47 50
? 48 49
? 47 49
! 47
? 1 50
? 27 50
? 39 50
? 45...

result:

ok Correct (10000 test cases)

Test #7:

score: 0
Accepted
time: 162ms
memory: 3576kb

input:

10000
100
76
78
35
5
5
3
9
9
100
29
66
29
20
20
20
22
24
23
100
64
38
38
88
88
90
86
87
87
83
100
51
57
57
98
92
92
79
78
77
81
100
44
75
44
13
13
17
12
11
11
7
100
64
64
62
41
41
41
42
40
39
100
93
56
93
40
32
32
44
44
45
100
37
37
33
57
60
54
74
75
75
70
100
76
76
76
76
80
86
87
86
85
100
32
32
32...

output:

? 1 100
? 51 100
? 26 100
? 1 25
? 1 12
? 1 6
? 7 12
? 9 10
! 10
? 1 100
? 26 75
? 1 75
? 1 25
? 14 25
? 20 25
? 20 22
? 23 25
? 23 24
! 25
? 1 100
? 26 75
? 1 75
? 76 100
? 82 93
? 88 93
? 82 87
? 86 87
? 84 87
? 82 83
! 82
? 1 100
? 26 75
? 1 75
? 76 100
? 89 100
? 83 100
? 76 82
? 78 80
? 76 80
?...

result:

ok Correct (10000 test cases)

Test #8:

score: 0
Accepted
time: 14ms
memory: 3576kb

input:

1000
1000
475
728
728
896
896
929
867
867
869
858
860
860
847
848
847
1000
278
278
446
598
598
573
679
665
679
652
647
652
645
645
1000
75
128
75
607
644
644
713
732
695
749
745
749
742
741
742
1000
239
239
45
432
350
350
442
442
451
458
458
459
462
463
463
1000
978
978
978
978
997
914
902
882
932
9...

output:

? 1 1000
? 251 750
? 1 750
? 751 1000
? 814 937
? 876 937
? 814 875
? 846 875
? 861 875
? 846 860
? 854 860
? 850 860
? 846 849
? 847 848
? 846 848
! 846
? 1 1000
? 251 750
? 251 500
? 501 750
? 564 687
? 564 625
? 626 687
? 658 687
? 642 687
? 642 657
? 646 653
? 642 653
? 642 645
? 644 645
! 644
?...

result:

ok Correct (1000 test cases)

Test #9:

score: 0
Accepted
time: 14ms
memory: 3628kb

input:

1017
272
246
186
246
111
110
111
73
73
73
73
114
105
91
91
2
2
2
2
3
910
173
173
173
127
14
14
28
56
56
51
44
45
47
48
726
229
517
229
118
63
118
28
28
28
28
27
24
861
315
315
344
491
551
551
632
641
614
593
593
594
597
596
1984
133
133
406
571
571
512
724
704
704
650
650
650
650
651
649
1145
988
98...

output:

? 1 272
? 137 272
? 69 272
? 69 136
? 86 119
? 69 119
? 69 85
? 73 80
? 73 76
? 73 74
! 74
? 1 114
? 59 114
? 30 114
? 1 29
? 1 14
? 1 7
? 1 3
? 2 3
! 1
? 1 910
? 1 454
? 1 227
? 114 227
? 1 113
? 1 56
? 1 28
? 29 56
? 43 56
? 50 56
? 43 49
? 43 45
? 43 47
? 48 49
! 49
? 1 726
? 183 544
? 1 544
? 1 ...

result:

ok Correct (1017 test cases)

Test #10:

score: 0
Accepted
time: 3ms
memory: 3620kb

input:

10
100000
3893
3893
3505
30673
33920
30673
43582
43582
43582
43582
43470
43242
43197
43046
43289
43298
43289
43268
43268
43268
43270
43273
43272
100000
32066
54928
54928
88585
88585
88585
89959
93282
93193
93193
90979
90917
90917
91257
91225
91257
91325
91339
91339
91348
91349
91348
91354
91353
1000...

output:

? 1 100000
? 1 50000
? 1 25000
? 25001 50000
? 25001 37500
? 25001 43750
? 37501 43750
? 40627 43750
? 42189 43750
? 42970 43750
? 43360 43750
? 42970 43359
? 43068 43261
? 42970 43261
? 43262 43359
? 43287 43334
? 43262 43334
? 43262 43286
? 43268 43279
? 43268 43273
? 43268 43270
? 43271 43273
? 4...

result:

ok Correct (10 test cases)

Test #11:

score: 0
Accepted
time: 3ms
memory: 3624kb

input:

21
84335
47947
60969
47947
9296
11772
1509
20931
19830
20931
17510
17606
17510
17352
17352
17352
17346
17316
17316
17308
17320
17320
17321
17323
159962
128177
145530
128177
54814
69184
54814
49869
48003
49869
43214
43214
43214
43231
43550
43608
43489
43675
43675
43670
43695
43695
43695
43696
43692
1...

output:

? 1 84335
? 21085 63251
? 1 63251
? 1 21084
? 5272 15813
? 1 15813
? 15814 21084
? 18450 21084
? 17132 21084
? 17132 18449
? 17462 18119
? 17132 18119
? 17132 17461
? 17215 17378
? 17297 17378
? 17338 17378
? 17297 17337
? 17307 17326
? 17307 17316
? 17317 17326
? 17320 17323
? 17320 17321
? 17322 1...

result:

ok Correct (21 test cases)

Test #12:

score: 0
Accepted
time: 1ms
memory: 3564kb

input:

1
1000000
641602
418256
169407
783270
783270
783270
783270
783270
786055
794273
791414
790964
796734
796734
796734
796734
796686
796850
796850
796850
796851
796864
796864
796866
796861
796861

output:

? 1 1000000
? 250001 750000
? 1 750000
? 750001 1000000
? 750001 875000
? 750001 812500
? 781251 812500
? 781251 796875
? 781251 789062
? 789063 796875
? 791016 794921
? 789063 794921
? 794922 796875
? 795900 796875
? 796388 796875
? 796632 796875
? 796632 796753
? 796754 796875
? 796816 796875
? 79...

result:

ok Correct (1 test case)

Test #13:

score: 0
Accepted
time: 0ms
memory: 3816kb

input:

16
232936
229707
229707
229707
229707
229707
231039
223556
220604
218882
224031
224548
224548
225261
225261
225290
225375
225395
225323
225407
225417
225417
225425
225425
225426
225423
8676
6498
6498
6498
5867
4978
4978
5022
4731
4731
4731
4717
4684
4692
4684
4699
4697
4699
4695
221085
172303
209705...

output:

? 1 232936
? 116469 232936
? 174703 232936
? 203820 232936
? 218378 232936
? 225657 232936
? 218378 225656
? 220198 223836
? 218378 223836
? 223837 225656
? 223837 224746
? 223837 225201
? 225202 225656
? 225202 225428
? 225202 225314
? 225315 225428
? 225344 225399
? 225315 225399
? 225400 225428
?...

result:

ok Correct (16 test cases)

Test #14:

score: 0
Accepted
time: 28ms
memory: 3676kb

input:

1994
667
666
667
667
167
166
166
42
41
41
11
10
10
3
2
374
373
374
374
94
93
93
24
23
23
6
5
5
2
488
486
488
488
122
121
121
31
30
30
8
7
7
2
922
921
922
922
231
230
230
58
57
57
15
14
14
4
3
3
639
637
639
639
160
159
159
40
39
39
10
9
9
3
2
353
350
353
353
89
88
88
23
22
22
6
5
5
2
71
66
71
71
18
1...

output:

? 1 667
? 335 667
? 168 667
? 1 167
? 85 167
? 43 167
? 1 42
? 23 42
? 12 42
? 1 11
? 7 11
? 4 11
? 1 3
? 2 3
! 1
? 1 374
? 189 374
? 95 374
? 1 94
? 49 94
? 25 94
? 1 24
? 13 24
? 7 24
? 1 6
? 5 6
? 3 6
? 1 2
! 1
? 1 488
? 245 488
? 123 488
? 1 122
? 63 122
? 32 122
? 1 31
? 17 31
? 9 31
? 1 8
? 5 ...

result:

ok Correct (1994 test cases)

Test #15:

score: -100
Runtime Error

input:

18
153667
153667
153666
153666
38417
38416
38416
9605
9604
9604
2402
2401
2401
601
600
600
151
150
150
38
37
37
10
9
9
3
2
211376
211374
211376
211376
52844
52843
52843
13211
13210
13210
3303
3302
3302
826
825
825
207
206
206
52
51
51
13
12
12
4
3
3
195330
195326
195330
195330
48833
48832
48832
1220...

output:

? 1 153667
? 76835 153667
? 38418 153667
? 1 38417
? 19210 38417
? 9606 38417
? 1 9605
? 4804 9605
? 2403 9605
? 1 2402
? 1203 2402
? 602 2402
? 1 601
? 302 601
? 152 601
? 1 151
? 77 151
? 39 151
? 1 38
? 21 38
? 11 38
? 1 10
? 7 10
? 4 10
? 1 3
? 2 3
! 1
? 1 211376
? 105689 211376
? 52845 211376
?...

result: