QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#698531#9251. Graph ChangingmaspyAC ✓108ms4212kbC++2321.8kb2024-11-01 20:14:112024-11-01 20:14:12

Judging History

你现在查看的是最新测评结果

  • [2024-11-01 20:14:12]
  • 评测
  • 测评结果:AC
  • 用时:108ms
  • 内存:4212kb
  • [2024-11-01 20:14:11]
  • 提交

answer

#line 1 "/home/maspy/compro/library/my_template.hpp"
#if defined(LOCAL)
#include <my_template_compiled.hpp>
#else

// https://codeforces.com/blog/entry/96344
#pragma GCC optimize("Ofast,unroll-loops")
// いまの CF だとこれ入れると動かない?
// #pragma GCC target("avx2,popcnt")

#include <bits/stdc++.h>

using namespace std;

using ll = long long;
using u8 = uint8_t;
using u16 = uint16_t;
using u32 = uint32_t;
using u64 = uint64_t;
using i128 = __int128;
using u128 = unsigned __int128;
using f128 = __float128;

template <class T>
constexpr T infty = 0;
template <>
constexpr int infty<int> = 1'010'000'000;
template <>
constexpr ll infty<ll> = 2'020'000'000'000'000'000;
template <>
constexpr u32 infty<u32> = infty<int>;
template <>
constexpr u64 infty<u64> = infty<ll>;
template <>
constexpr i128 infty<i128> = i128(infty<ll>) * 2'000'000'000'000'000'000;
template <>
constexpr double infty<double> = infty<ll>;
template <>
constexpr long double infty<long double> = infty<ll>;

using pi = pair<ll, ll>;
using vi = vector<ll>;
template <class T>
using vc = vector<T>;
template <class T>
using vvc = vector<vc<T>>;
template <class T>
using vvvc = vector<vvc<T>>;
template <class T>
using vvvvc = vector<vvvc<T>>;
template <class T>
using vvvvvc = vector<vvvvc<T>>;
template <class T>
using pq = priority_queue<T>;
template <class T>
using pqg = priority_queue<T, vector<T>, greater<T>>;

#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__))))

// https://trap.jp/post/1224/
#define FOR1(a) for (ll _ = 0; _ < ll(a); ++_)
#define FOR2(i, a) for (ll i = 0; i < ll(a); ++i)
#define FOR3(i, a, b) for (ll i = a; i < ll(b); ++i)
#define FOR4(i, a, b, c) for (ll i = a; i < ll(b); i += (c))
#define FOR1_R(a) for (ll i = (a)-1; i >= ll(0); --i)
#define FOR2_R(i, a) for (ll i = (a)-1; i >= ll(0); --i)
#define FOR3_R(i, a, b) for (ll i = (b)-1; i >= ll(a); --i)
#define overload4(a, b, c, d, e, ...) e
#define overload3(a, b, c, d, ...) d
#define FOR(...) overload4(__VA_ARGS__, FOR4, FOR3, FOR2, FOR1)(__VA_ARGS__)
#define FOR_R(...) overload3(__VA_ARGS__, FOR3_R, FOR2_R, FOR1_R)(__VA_ARGS__)

#define FOR_subset(t, s) for (ll t = (s); t >= 0; t = (t == 0 ? -1 : (t - 1) & (s)))
#define all(x) x.begin(), x.end()
#define len(x) ll(x.size())
#define elif else if

#define eb emplace_back
#define mp make_pair
#define mt make_tuple
#define fi first
#define se second

#define stoi stoll

int popcnt(int x) { return __builtin_popcount(x); }
int popcnt(u32 x) { return __builtin_popcount(x); }
int popcnt(ll x) { return __builtin_popcountll(x); }
int popcnt(u64 x) { return __builtin_popcountll(x); }
int popcnt_mod_2(int x) { return __builtin_parity(x); }
int popcnt_mod_2(u32 x) { return __builtin_parity(x); }
int popcnt_mod_2(ll x) { return __builtin_parityll(x); }
int popcnt_mod_2(u64 x) { return __builtin_parityll(x); }
// (0, 1, 2, 3, 4) -> (-1, 0, 1, 1, 2)
int topbit(int x) { return (x == 0 ? -1 : 31 - __builtin_clz(x)); }
int topbit(u32 x) { return (x == 0 ? -1 : 31 - __builtin_clz(x)); }
int topbit(ll x) { return (x == 0 ? -1 : 63 - __builtin_clzll(x)); }
int topbit(u64 x) { return (x == 0 ? -1 : 63 - __builtin_clzll(x)); }
// (0, 1, 2, 3, 4) -> (-1, 0, 1, 0, 2)
int lowbit(int x) { return (x == 0 ? -1 : __builtin_ctz(x)); }
int lowbit(u32 x) { return (x == 0 ? -1 : __builtin_ctz(x)); }
int lowbit(ll x) { return (x == 0 ? -1 : __builtin_ctzll(x)); }
int lowbit(u64 x) { return (x == 0 ? -1 : __builtin_ctzll(x)); }

template <typename T>
T floor(T a, T b) {
  return a / b - (a % b && (a ^ b) < 0);
}
template <typename T>
T ceil(T x, T y) {
  return floor(x + y - 1, y);
}
template <typename T>
T bmod(T x, T y) {
  return x - y * floor(x, y);
}
template <typename T>
pair<T, T> divmod(T x, T y) {
  T q = floor(x, y);
  return {q, x - q * y};
}

template <typename T, typename U>
T SUM(const vector<U> &A) {
  T sm = 0;
  for (auto &&a: A) sm += a;
  return sm;
}

#define MIN(v) *min_element(all(v))
#define MAX(v) *max_element(all(v))
#define LB(c, x) distance((c).begin(), lower_bound(all(c), (x)))
#define UB(c, x) distance((c).begin(), upper_bound(all(c), (x)))
#define UNIQUE(x) sort(all(x)), x.erase(unique(all(x)), x.end()), x.shrink_to_fit()

template <typename T>
T POP(deque<T> &que) {
  T a = que.front();
  que.pop_front();
  return a;
}
template <typename T>
T POP(pq<T> &que) {
  T a = que.top();
  que.pop();
  return a;
}
template <typename T>
T POP(pqg<T> &que) {
  T a = que.top();
  que.pop();
  return a;
}
template <typename T>
T POP(vc<T> &que) {
  T a = que.back();
  que.pop_back();
  return a;
}

template <typename F>
ll binary_search(F check, ll ok, ll ng, bool check_ok = true) {
  if (check_ok) assert(check(ok));
  while (abs(ok - ng) > 1) {
    auto x = (ng + ok) / 2;
    (check(x) ? ok : ng) = x;
  }
  return ok;
}
template <typename F>
double binary_search_real(F check, double ok, double ng, int iter = 100) {
  FOR(iter) {
    double x = (ok + ng) / 2;
    (check(x) ? ok : ng) = x;
  }
  return (ok + ng) / 2;
}

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);
}

// ? は -1
vc<int> s_to_vi(const string &S, char first_char) {
  vc<int> A(S.size());
  FOR(i, S.size()) { A[i] = (S[i] != '?' ? S[i] - first_char : -1); }
  return A;
}

template <typename T, typename U>
vector<T> cumsum(vector<U> &A, int off = 1) {
  int N = A.size();
  vector<T> B(N + 1);
  FOR(i, N) { B[i + 1] = B[i] + A[i]; }
  if (off == 0) B.erase(B.begin());
  return B;
}

// stable sort
template <typename T>
vector<int> argsort(const vector<T> &A) {
  vector<int> ids(len(A));
  iota(all(ids), 0);
  sort(all(ids), [&](int i, int j) { return (A[i] == A[j] ? i < j : A[i] < A[j]); });
  return ids;
}

// A[I[0]], A[I[1]], ...
template <typename T>
vc<T> rearrange(const vc<T> &A, const vc<int> &I) {
  vc<T> B(len(I));
  FOR(i, len(I)) B[i] = A[I[i]];
  return B;
}

template <typename T, typename... Vectors>
void concat(vc<T> &first, const Vectors &... others) {
  vc<T> &res = first;
  (res.insert(res.end(), others.begin(), others.end()), ...);
}
#endif
#line 1 "/home/maspy/compro/library/other/io.hpp"
#define FASTIO
#include <unistd.h>

// https://judge.yosupo.jp/submission/21623
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() {
  memcpy(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(u32 &x) { rd_integer(x); }
void rd(u64 &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); }
void rd(f128 &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(vc<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(u32 x) { wt_integer(x); }
void wt(u64 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); }
void wt(f128 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)...);
}

// gcc expansion. called automaticall after main.
void __attribute__((destructor)) _d() { flush(); }
} // namespace fastio
using fastio::read;
using fastio::print;
using fastio::flush;

#if defined(LOCAL)
#define SHOW(...) SHOW_IMPL(__VA_ARGS__, SHOW6, SHOW5, SHOW4, SHOW3, SHOW2, SHOW1)(__VA_ARGS__)
#define SHOW_IMPL(_1, _2, _3, _4, _5, _6, NAME, ...) NAME
#define SHOW1(x) print(#x, "=", (x)), flush()
#define SHOW2(x, y) print(#x, "=", (x), #y, "=", (y)), flush()
#define SHOW3(x, y, z) print(#x, "=", (x), #y, "=", (y), #z, "=", (z)), flush()
#define SHOW4(x, y, z, w) print(#x, "=", (x), #y, "=", (y), #z, "=", (z), #w, "=", (w)), flush()
#define SHOW5(x, y, z, w, v) print(#x, "=", (x), #y, "=", (y), #z, "=", (z), #w, "=", (w), #v, "=", (v)), flush()
#define SHOW6(x, y, z, w, v, u) print(#x, "=", (x), #y, "=", (y), #z, "=", (z), #w, "=", (w), #v, "=", (v), #u, "=", (u)), flush()
#else
#define SHOW(...)
#endif

#define INT(...)   \
  int __VA_ARGS__; \
  read(__VA_ARGS__)
#define LL(...)   \
  ll __VA_ARGS__; \
  read(__VA_ARGS__)
#define U32(...)   \
  u32 __VA_ARGS__; \
  read(__VA_ARGS__)
#define U64(...)   \
  u64 __VA_ARGS__; \
  read(__VA_ARGS__)
#define STR(...)      \
  string __VA_ARGS__; \
  read(__VA_ARGS__)
#define CHAR(...)   \
  char __VA_ARGS__; \
  read(__VA_ARGS__)
#define DBL(...)      \
  double __VA_ARGS__; \
  read(__VA_ARGS__)

#define VEC(type, name, size) \
  vector<type> name(size);    \
  read(name)
#define VV(type, name, h, w)                     \
  vector<vector<type>> name(h, vector<type>(w)); \
  read(name)

void YES(bool t = 1) { print(t ? "YES" : "NO"); }
void NO(bool t = 1) { YES(!t); }
void Yes(bool t = 1) { print(t ? "Yes" : "No"); }
void No(bool t = 1) { Yes(!t); }
void yes(bool t = 1) { print(t ? "yes" : "no"); }
void no(bool t = 1) { yes(!t); }
#line 3 "main.cpp"

#line 2 "/home/maspy/compro/library/graph/base.hpp"

template <typename T>
struct Edge {
  int frm, to;
  T cost;
  int id;
};

template <typename T = int, bool directed = false>
struct Graph {
  static constexpr bool is_directed = directed;
  int N, M;
  using cost_type = T;
  using edge_type = Edge<T>;
  vector<edge_type> edges;
  vector<int> indptr;
  vector<edge_type> csr_edges;
  vc<int> vc_deg, vc_indeg, vc_outdeg;
  bool prepared;

  class OutgoingEdges {
  public:
    OutgoingEdges(const Graph* G, int l, int r) : G(G), l(l), r(r) {}

    const edge_type* begin() const {
      if (l == r) { return 0; }
      return &G->csr_edges[l];
    }

    const edge_type* end() const {
      if (l == r) { return 0; }
      return &G->csr_edges[r];
    }

  private:
    const Graph* G;
    int l, r;
  };

  bool is_prepared() { return prepared; }

  Graph() : N(0), M(0), prepared(0) {}
  Graph(int N) : N(N), M(0), prepared(0) {}

  void build(int n) {
    N = n, M = 0;
    prepared = 0;
    edges.clear();
    indptr.clear();
    csr_edges.clear();
    vc_deg.clear();
    vc_indeg.clear();
    vc_outdeg.clear();
  }

  void add(int frm, int to, T cost = 1, int i = -1) {
    assert(!prepared);
    assert(0 <= frm && 0 <= to && to < N);
    if (i == -1) i = M;
    auto e = edge_type({frm, to, cost, i});
    edges.eb(e);
    ++M;
  }

#ifdef FASTIO
  // wt, off
  void read_tree(bool wt = false, int off = 1) { read_graph(N - 1, wt, off); }

  void read_graph(int M, bool wt = false, int off = 1) {
    for (int m = 0; m < M; ++m) {
      INT(a, b);
      a -= off, b -= off;
      if (!wt) {
        add(a, b);
      } else {
        T c;
        read(c);
        add(a, b, c);
      }
    }
    build();
  }
#endif

  void build() {
    assert(!prepared);
    prepared = true;
    indptr.assign(N + 1, 0);
    for (auto&& e: edges) {
      indptr[e.frm + 1]++;
      if (!directed) indptr[e.to + 1]++;
    }
    for (int v = 0; v < N; ++v) { indptr[v + 1] += indptr[v]; }
    auto counter = indptr;
    csr_edges.resize(indptr.back() + 1);
    for (auto&& e: edges) {
      csr_edges[counter[e.frm]++] = e;
      if (!directed)
        csr_edges[counter[e.to]++] = edge_type({e.to, e.frm, e.cost, e.id});
    }
  }

  OutgoingEdges operator[](int v) const {
    assert(prepared);
    return {this, indptr[v], indptr[v + 1]};
  }

  vc<int> deg_array() {
    if (vc_deg.empty()) calc_deg();
    return vc_deg;
  }

  pair<vc<int>, vc<int>> deg_array_inout() {
    if (vc_indeg.empty()) calc_deg_inout();
    return {vc_indeg, vc_outdeg};
  }

  int deg(int v) {
    if (vc_deg.empty()) calc_deg();
    return vc_deg[v];
  }

  int in_deg(int v) {
    if (vc_indeg.empty()) calc_deg_inout();
    return vc_indeg[v];
  }

  int out_deg(int v) {
    if (vc_outdeg.empty()) calc_deg_inout();
    return vc_outdeg[v];
  }

#ifdef FASTIO
  void debug() {
    print("Graph");
    if (!prepared) {
      print("frm to cost id");
      for (auto&& e: edges) print(e.frm, e.to, e.cost, e.id);
    } else {
      print("indptr", indptr);
      print("frm to cost id");
      FOR(v, N) for (auto&& e: (*this)[v]) print(e.frm, e.to, e.cost, e.id);
    }
  }
#endif

  vc<int> new_idx;
  vc<bool> used_e;

  // G における頂点 V[i] が、新しいグラフで i になるようにする
  // {G, es}
  // sum(deg(v)) の計算量になっていて、
  // 新しいグラフの n+m より大きい可能性があるので注意
  Graph<T, directed> rearrange(vc<int> V, bool keep_eid = 0) {
    if (len(new_idx) != N) new_idx.assign(N, -1);
    int n = len(V);
    FOR(i, n) new_idx[V[i]] = i;
    Graph<T, directed> G(n);
    vc<int> history;
    FOR(i, n) {
      for (auto&& e: (*this)[V[i]]) {
        if (len(used_e) <= e.id) used_e.resize(e.id + 1);
        if (used_e[e.id]) continue;
        int a = e.frm, b = e.to;
        if (new_idx[a] != -1 && new_idx[b] != -1) {
          history.eb(e.id);
          used_e[e.id] = 1;
          int eid = (keep_eid ? e.id : -1);
          G.add(new_idx[a], new_idx[b], e.cost, eid);
        }
      }
    }
    FOR(i, n) new_idx[V[i]] = -1;
    for (auto&& eid: history) used_e[eid] = 0;
    G.build();
    return G;
  }

  Graph<T, true> to_directed_tree(int root = -1) {
    if (root == -1) root = 0;
    assert(!is_directed && prepared && M == N - 1);
    Graph<T, true> G1(N);
    vc<int> par(N, -1);
    auto dfs = [&](auto& dfs, int v) -> void {
      for (auto& e: (*this)[v]) {
        if (e.to == par[v]) continue;
        par[e.to] = v, dfs(dfs, e.to);
      }
    };
    dfs(dfs, root);
    for (auto& e: edges) {
      int a = e.frm, b = e.to;
      if (par[a] == b) swap(a, b);
      assert(par[b] == a);
      G1.add(a, b, e.cost);
    }
    G1.build();
    return G1;
  }

private:
  void calc_deg() {
    assert(vc_deg.empty());
    vc_deg.resize(N);
    for (auto&& e: edges) vc_deg[e.frm]++, vc_deg[e.to]++;
  }

  void calc_deg_inout() {
    assert(vc_indeg.empty());
    vc_indeg.resize(N);
    vc_outdeg.resize(N);
    for (auto&& e: edges) { vc_indeg[e.to]++, vc_outdeg[e.frm]++; }
  }
};
#line 3 "/home/maspy/compro/library/graph/shortest_path/bfs01.hpp"

template <typename T, typename GT>
pair<vc<T>, vc<int>> bfs01(GT& G, int v) {
  assert(G.is_prepared());
  int N = G.N;
  vc<T> dist(N, infty<T>);
  vc<int> par(N, -1);
  deque<int> que;

  dist[v] = 0;
  que.push_front(v);
  while (!que.empty()) {
    auto v = que.front();
    que.pop_front();
    for (auto&& e: G[v]) {
      if (dist[e.to] == infty<T> || dist[e.to] > dist[e.frm] + e.cost) {
        dist[e.to] = dist[e.frm] + e.cost;
        par[e.to] = e.frm;
        if (e.cost == 0)
          que.push_front(e.to);
        else
          que.push_back(e.to);
      }
    }
  }
  return {dist, par};
}

// 多点スタート。[dist, par, root]
template <typename T, typename GT>
tuple<vc<T>, vc<int>, vc<int>> bfs01(GT& G, vc<int> vs) {
  assert(G.is_prepared());
  int N = G.N;
  vc<T> dist(N, infty<T>);
  vc<int> par(N, -1);
  vc<int> root(N, -1);
  deque<int> que;

  for (auto&& v: vs) {
    dist[v] = 0;
    root[v] = v;
    que.push_front(v);
  }

  while (!que.empty()) {
    auto v = que.front();
    que.pop_front();
    for (auto&& e: G[v]) {
      if (dist[e.to] == infty<T> || dist[e.to] > dist[e.frm] + e.cost) {
        dist[e.to] = dist[e.frm] + e.cost;
        root[e.to] = root[e.frm];
        par[e.to] = e.frm;
        if (e.cost == 0)
          que.push_front(e.to);
        else
          que.push_back(e.to);
      }
    }
  }
  return {dist, par, root};
}
#line 5 "main.cpp"

ll naive(ll T, ll N, ll K, ll X, ll Y) {
  vv(int, mat, N, N, infty<int>);
  FOR(i, N) FOR(j, N) mat[i][j] = abs(i - j);
  FOR(T) {
    FOR(i, N) FOR(j, N) {
      if (i == j) continue;
      if (mat[i][j] < K) mat[i][j] = infty<int>;
      if (mat[i][j] < infty<int>) mat[i][j] = 1;
    }
    FOR(k, N) FOR(i, N) FOR(j, N) { chmin(mat[i][j], mat[i][k] + mat[k][j]); }
  }
  ll ans = mat[X][Y];
  if (ans == infty<int>) return -1;
  return ans;
}

ll F(ll T, ll N, ll K, ll X, ll Y) {
  if (T == 0) { return (abs(X - Y)); }
  if (T == 1) {
    Graph<int, 0> G(4);
    vi V = {X, Y, 0, N - 1};
    FOR(a, 4) FOR(b, a) {
      if (abs(V[a] - V[b]) >= K) G.add(a, b);
    }
    G.build();
    auto [dist, par] = bfs01<int>(G, 0);
    int ans = dist[1];
    if (ans == infty<int>) ans = -1;
    return ans;
  }
  if (K >= 4) return -1;
  if (K == 3) {
    if (N >= 8) {
      // T=1 で完全グラフになっている
      // そこから先は空グラフ
      return -1;
    }
    vv(int, mat, N, N, infty<int>);
    FOR(i, N) mat[i][i] = 0;
    FOR(i, N - 1) mat[i][i + 1] = mat[i + 1][i] = 1;
    chmin(T, 5);
    return naive(T, N, K, X, Y);
  }
  assert(K <= 2);
  if (K == 1) {
    // 完全
    return 1;
  }
  assert(K == 2 && T >= 2);
  if (N == 2) { return -1; }
  if (N == 3) { return -1; }
  // 補グラフ
  T %= 2;
  if (N <= 5) { return naive(T, N, K, X, Y); }
  if (T == 0) return abs(X - Y);
  return (abs(X - Y) == 1 ? 2 : 1);
}

void solve() {
  LL(T, N, K, X, Y);
  --X, --Y;

  print(F(T, N, K, X, Y));
}

void test() {
  FOR(T, 1, 10) FOR(N, 1, 10) FOR(K, 1, 10) {
    FOR(X, N) FOR(Y, N) {
      if (X == Y) continue;
      ll a = F(T, N, K, X, Y);
      ll b = naive(T, N, K, X, Y);
      SHOW(T, N, K, X, Y);
      SHOW(a, b);
      assert(a == b);
    }
  }
}

signed main() {
  // test();
  // return 0;
  INT(T);
  FOR(T) solve();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3932kb

input:

5
1 5 3 2 4
1 10 4 2 4
2 10 5 2 4
1 3 2 1 3
1 3 2 1 2

output:

3
2
-1
1
-1

result:

ok 5 lines

Test #2:

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

input:

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

output:

1
-1
-1
-1
-1
-1
1
-1
-1
-1
-1
-1
1
-1
-1
-1
-1
-1
1
-1
-1
-1
-1
-1
1
-1
-1
-1
-1
-1

result:

ok 30 lines

Test #3:

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

input:

90
1 3 1 1 2
1 3 1 1 3
1 3 1 2 3
1 3 2 1 2
1 3 2 1 3
1 3 2 2 3
1 3 3 1 2
1 3 3 1 3
1 3 3 2 3
1 3 4 1 2
1 3 4 1 3
1 3 4 2 3
1 3 5 1 2
1 3 5 1 3
1 3 5 2 3
1 3 6 1 2
1 3 6 1 3
1 3 6 2 3
2 3 1 1 2
2 3 1 1 3
2 3 1 2 3
2 3 2 1 2
2 3 2 1 3
2 3 2 2 3
2 3 3 1 2
2 3 3 1 3
2 3 3 2 3
2 3 4 1 2
2 3 4 1 3
2 3 4 2...

output:

1
1
1
-1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1
1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1
1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1
1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1
1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1

result:

ok 90 lines

Test #4:

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

input:

180
1 4 1 1 2
1 4 1 1 3
1 4 1 1 4
1 4 1 2 3
1 4 1 2 4
1 4 1 3 4
1 4 2 1 2
1 4 2 1 3
1 4 2 1 4
1 4 2 2 3
1 4 2 2 4
1 4 2 3 4
1 4 3 1 2
1 4 3 1 3
1 4 3 1 4
1 4 3 2 3
1 4 3 2 4
1 4 3 3 4
1 4 4 1 2
1 4 4 1 3
1 4 4 1 4
1 4 4 2 3
1 4 4 2 4
1 4 4 3 4
1 4 5 1 2
1 4 5 1 3
1 4 5 1 4
1 4 5 2 3
1 4 5 2 4
1 4 5 ...

output:

1
1
1
1
1
1
2
1
1
3
1
2
-1
-1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1
1
1
1
1
1
1
2
3
1
2
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1
1
1
1
1
1
2
1
1
3
1
2
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1
1
1
1
1
1
1...

result:

ok 180 lines

Test #5:

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

input:

300
1 5 1 1 2
1 5 1 1 3
1 5 1 1 4
1 5 1 1 5
1 5 1 2 3
1 5 1 2 4
1 5 1 2 5
1 5 1 3 4
1 5 1 3 5
1 5 1 4 5
1 5 2 1 2
1 5 2 1 3
1 5 2 1 4
1 5 2 1 5
1 5 2 2 3
1 5 2 2 4
1 5 2 2 5
1 5 2 3 4
1 5 2 3 5
1 5 2 4 5
1 5 3 1 2
1 5 3 1 3
1 5 3 1 4
1 5 3 1 5
1 5 3 2 3
1 5 3 2 4
1 5 3 2 5
1 5 3 3 4
1 5 3 3 5
1 5 3 ...

output:

1
1
1
1
1
1
1
1
1
1
2
1
1
1
2
1
1
2
1
2
2
-1
1
1
-1
3
1
-1
-1
2
-1
-1
-1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1
1
1
1
1
1
1
1
1
1
1
2
3
4
1
2
3
1
2
1
-1
-1
-1
-1
-1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
...

result:

ok 300 lines

Test #6:

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

input:

450
1 6 1 1 2
1 6 1 1 3
1 6 1 1 4
1 6 1 1 5
1 6 1 1 6
1 6 1 2 3
1 6 1 2 4
1 6 1 2 5
1 6 1 2 6
1 6 1 3 4
1 6 1 3 5
1 6 1 3 6
1 6 1 4 5
1 6 1 4 6
1 6 1 5 6
1 6 2 1 2
1 6 2 1 3
1 6 2 1 4
1 6 2 1 5
1 6 2 1 6
1 6 2 2 3
1 6 2 2 4
1 6 2 2 5
1 6 2 2 6
1 6 2 3 4
1 6 2 3 5
1 6 2 3 6
1 6 2 4 5
1 6 2 4 6
1 6 2 ...

output:

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
2
1
1
1
2
1
1
2
1
2
2
2
1
1
1
2
3
1
1
3
3
1
2
2
2
2
-1
-1
1
1
-1
-1
3
1
-1
-1
-1
-1
-1
2
-1
-1
-1
-1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
3
4
5
1
2
3
4
1
2
3
1
2
1
-1
-1
-1
-1
-1
2
1
3
-...

result:

ok 450 lines

Test #7:

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

input:

630
1 7 1 1 2
1 7 1 1 3
1 7 1 1 4
1 7 1 1 5
1 7 1 1 6
1 7 1 1 7
1 7 1 2 3
1 7 1 2 4
1 7 1 2 5
1 7 1 2 6
1 7 1 2 7
1 7 1 3 4
1 7 1 3 5
1 7 1 3 6
1 7 1 3 7
1 7 1 4 5
1 7 1 4 6
1 7 1 4 7
1 7 1 5 6
1 7 1 5 7
1 7 1 6 7
1 7 2 1 2
1 7 2 1 3
1 7 2 1 4
1 7 2 1 5
1 7 2 1 6
1 7 2 1 7
1 7 2 2 3
1 7 2 2 4
1 7 2 ...

output:

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
2
1
1
1
1
2
1
1
1
2
1
1
2
1
2
2
2
1
1
1
1
2
2
1
1
1
2
3
1
1
2
2
1
2
2
2
2
2
-1
1
1
1
2
-1
3
1
1
-1
3
3
1
-1
-1
-1
2
2
2
2
-1
-1
-1
1
1
-1
-1
-1
3
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
2
-1
-1
-1
-1
-1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1
1
1
1...

result:

ok 630 lines

Test #8:

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

input:

840
1 8 1 1 2
1 8 1 1 3
1 8 1 1 4
1 8 1 1 5
1 8 1 1 6
1 8 1 1 7
1 8 1 1 8
1 8 1 2 3
1 8 1 2 4
1 8 1 2 5
1 8 1 2 6
1 8 1 2 7
1 8 1 2 8
1 8 1 3 4
1 8 1 3 5
1 8 1 3 6
1 8 1 3 7
1 8 1 3 8
1 8 1 4 5
1 8 1 4 6
1 8 1 4 7
1 8 1 4 8
1 8 1 5 6
1 8 1 5 7
1 8 1 5 8
1 8 1 6 7
1 8 1 6 8
1 8 1 7 8
1 8 2 1 2
1 8 2 ...

output:

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
2
1
1
1
1
1
2
1
1
1
1
2
1
1
1
2
1
1
2
1
2
2
2
1
1
1
1
1
2
2
1
1
1
1
2
2
1
1
1
2
2
1
1
2
2
1
2
2
2
2
2
2
1
1
1
1
2
2
3
1
1
1
2
3
3
1
1
3
3
3
1
2
2
2
2
2
2
2
2
-1
-1
1
1
1
2
-1
-1
3
1
1
-1
-1
3
3
1
-1
-1
-1
-1
-1
-1
-1
2
2
2
2
-1
-1...

result:

ok 840 lines

Test #9:

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

input:

1080
1 9 1 1 2
1 9 1 1 3
1 9 1 1 4
1 9 1 1 5
1 9 1 1 6
1 9 1 1 7
1 9 1 1 8
1 9 1 1 9
1 9 1 2 3
1 9 1 2 4
1 9 1 2 5
1 9 1 2 6
1 9 1 2 7
1 9 1 2 8
1 9 1 2 9
1 9 1 3 4
1 9 1 3 5
1 9 1 3 6
1 9 1 3 7
1 9 1 3 8
1 9 1 3 9
1 9 1 4 5
1 9 1 4 6
1 9 1 4 7
1 9 1 4 8
1 9 1 4 9
1 9 1 5 6
1 9 1 5 7
1 9 1 5 8
1 9 1...

output:

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
2
1
1
1
1
1
1
2
1
1
1
1
1
2
1
1
1
1
2
1
1
1
2
1
1
2
1
2
2
2
1
1
1
1
1
1
2
2
1
1
1
1
1
2
2
1
1
1
1
2
2
1
1
1
2
2
1
1
2
2
1
2
2
2
2
2
2
1
1
1
1
1
2
2
2
1
1
1
1
2
2
3
1
1
1
2
3
3
1
1
2
2
2
1
2
2
2
2
2
2
2
2
2
-1
1
1...

result:

ok 1080 lines

Test #10:

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

input:

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

output:

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
2
1
1
1
1
1
1
2
1
1
1
1
1
2
1
1
1
1
2
1
1
1
2
1
1
2
1
2
2
2
1
1
1
1
1
1
1
2
2
1
1
1
1
1
1
2
2
1
1
1
1
1
2
2
1
1
1
1
2
2
1
1
1
2
2
1
1
2
2
1
2
2
2
2
2
2
1
1
1
1
1
1
2
2
2
1
1
1
...

result:

ok 1350 lines

Test #11:

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

input:

1650
1 11 1 1 2
1 11 1 1 3
1 11 1 1 4
1 11 1 1 5
1 11 1 1 6
1 11 1 1 7
1 11 1 1 8
1 11 1 1 9
1 11 1 1 10
1 11 1 1 11
1 11 1 2 3
1 11 1 2 4
1 11 1 2 5
1 11 1 2 6
1 11 1 2 7
1 11 1 2 8
1 11 1 2 9
1 11 1 2 10
1 11 1 2 11
1 11 1 3 4
1 11 1 3 5
1 11 1 3 6
1 11 1 3 7
1 11 1 3 8
1 11 1 3 9
1 11 1 3 10
1 11...

output:

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
2
1
1
1
1
1
1
2
1
1
1
1
1
2
1
1
1
1
2
1
1
1
2
1
1
2
1
2
2
2
1
1
1
1
1
1
1
1
2
2
1
1
1
1
1
1
1
2
2
1
1
1
1
1
1
2
2
1
1
1
1
1
2
2
1
1
1
1
...

result:

ok 1650 lines

Test #12:

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

input:

1980
1 12 1 1 2
1 12 1 1 3
1 12 1 1 4
1 12 1 1 5
1 12 1 1 6
1 12 1 1 7
1 12 1 1 8
1 12 1 1 9
1 12 1 1 10
1 12 1 1 11
1 12 1 1 12
1 12 1 2 3
1 12 1 2 4
1 12 1 2 5
1 12 1 2 6
1 12 1 2 7
1 12 1 2 8
1 12 1 2 9
1 12 1 2 10
1 12 1 2 11
1 12 1 2 12
1 12 1 3 4
1 12 1 3 5
1 12 1 3 6
1 12 1 3 7
1 12 1 3 8
1 1...

output:

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
2
1
1
1
1
1
1
2
1
1
1
1
1
2
1
1
1
1
2
1
1
1
2
1
1
2
1
2
2
2
1
1
1
1
1
1
1
1
1
2
2
1
1
1
1
1
...

result:

ok 1980 lines

Test #13:

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

input:

2340
1 13 1 1 2
1 13 1 1 3
1 13 1 1 4
1 13 1 1 5
1 13 1 1 6
1 13 1 1 7
1 13 1 1 8
1 13 1 1 9
1 13 1 1 10
1 13 1 1 11
1 13 1 1 12
1 13 1 1 13
1 13 1 2 3
1 13 1 2 4
1 13 1 2 5
1 13 1 2 6
1 13 1 2 7
1 13 1 2 8
1 13 1 2 9
1 13 1 2 10
1 13 1 2 11
1 13 1 2 12
1 13 1 2 13
1 13 1 3 4
1 13 1 3 5
1 13 1 3 6
1...

output:

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
2
1
1
1
1
1
1
2
1
1
1
1
1
2
1
1
1
1
2
1
1
1
...

result:

ok 2340 lines

Test #14:

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

input:

1000000
247642294 961448649 733001129 279130562 530835402
732002655 505705299 645705556 487588093 488005936
423909487 956469930 42118321 776825480 857914491
573024322 173584499 411922860 68071790 127760171
195256403 617390756 240978977 289616458 604023215
302970816 281642201 617886109 245587163 2738...

output:

-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
...

result:

ok 1000000 lines

Test #15:

score: 0
Accepted
time: 47ms
memory: 4212kb

input:

999999
818561732 105393047 308277328 55828222 95820891
626623416 914227808 963423453 365760112 463062746
685116026 447528560 848245265 304903588 410888549
190989264 573411702 351364570 477139815 538078040
165251011 443239658 880597903 283340857 321622039
580345373 729628729 253275172 260647549 56083...

output:

-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
...

result:

ok 999999 lines

Test #16:

score: 0
Accepted
time: 47ms
memory: 3956kb

input:

999998
641304551 95615249 714496774 44706863 82597067
99120825 296948618 325272169 221497167 253219866
547135214 407423323 615477879 395311431 402237613
902423318 562586582 197117012 215866474 332581531
746228275 461110170 365490393 8270545 13567149
209099954 601749155 822593415 70976179 302958983
7...

output:

-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
...

result:

ok 999998 lines

Test #17:

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

input:

999997
759014662 790870149 120716220 312341665 750583643
908054724 384702127 982088181 220708338 372080663
745590890 662285387 822901980 14637938 407944387
613857370 473613609 192612558 314642869 447537089
327205537 773947983 850382884 367385950 465660605
542887244 473869581 242168554 442534885 4616...

output:

-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
...

result:

ok 999997 lines

Test #18:

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

input:

999996
286790189 76059652 676678771 27025196 72899785
380552134 140538090 638904193 140356967 140371077
944046566 622180150 180069186 386081350 473991190
325291423 167821189 333332295 37470414 135098524
834553872 8637942 335275375 984215 5958852
245270753 51022707 516519501 15376414 50059575
4736168...

output:

-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
...

result:

ok 999996 lines

Test #19:

score: 0
Accepted
time: 102ms
memory: 3972kb

input:

1000000
5 961448649 14 279130562 530835402
0 505705299 11 487588093 488005936
5 956469930 6 776825480 857914491
5 173584499 5 68071790 127760171
5 617390756 2 289616458 604023215
2 281642201 14 245587163 273817065
5 411506287 9 42526705 317589066
3 547485462 9 271470684 437838096
5 996351074 6 74856...

output:

-1
417843
-1
-1
1
-1
-1
-1
-1
1
-1
1
6580696
422807208
153431515
-1
179429643
-1
84805156
-1
654790747
60452774
31347044
15066715
-1
18522683
-1
4346920
1
-1
-1
22973969
1
24950066
-1
-1
96093015
-1
1
-1
-1
-1
-1
-1
18083094
42298920
-1
1
-1
-1
-1
-1
1
-1
-1
90334756
24178093
126162761
-1
-1
-1
-1
1...

result:

ok 1000000 lines

Test #20:

score: 0
Accepted
time: 101ms
memory: 3852kb

input:

999999
0 105393047 8 55828222 95820891
2 914227808 13 365760112 463062746
3 447528560 10 304903588 410888549
1 573411702 5 477139815 538078040
5 443239658 13 283340857 321622039
5 729628729 7 260647549 560838179
3 215299701 10 34885046 213523791
2 859374122 1 544508624 795986441
4 864873312 7 416831...

output:

39992669
-1
-1
1
-1
-1
-1
1
-1
-1
-1
1
1
-1
-1
-1
-1
1
-1
-1
-1
1
10573113
-1
1
-1
-1
1
1
-1
-1
-1
68522961
-1
-1
-1
1
-1
-1
1
1
-1
-1
-1
1
17590651
-1
-1
-1
-1
11554641
-1
1
1
1
-1
-1
288548258
447374910
-1
1
1
19114954
-1
-1
1
1
-1
-1
-1
1
-1
121545976
1
-1
-1
-1
-1
1
-1
-1
-1
22273383
-1
99473454...

result:

ok 999999 lines

Test #21:

score: 0
Accepted
time: 97ms
memory: 4188kb

input:

999998
4 95615249 9 44706863 82597067
1 296948618 14 221497167 253219866
4 407423323 14 395311431 402237613
4 562586582 7 215866474 332581531
5 461110170 3 8270545 13567149
1 601749155 15 70976179 302958983
2 932067490 13 282852789 866650449
3 392745208 11 84796685 215041796
5 181898334 11 141866145...

output:

-1
1
-1
-1
-1
1
-1
-1
-1
350618868
-1
-1
-1
1
-1
-1
-1
1
-1
-1
71256593
1
122819155
20990479
274550506
-1
1
-1
-1
-1
1
-1
-1
-1
-1
118002775
-1
1
-1
-1
1
-1
-1
1
-1
-1
41577280
-1
-1
-1
-1
63382083
-1
-1
1
-1
1
-1
-1
640147
1
-1
254225645
86753831
103490873
54662526
1
-1
1
-1
-1
-1
1
-1
1
-1
1
-1
80...

result:

ok 999998 lines

Test #22:

score: 0
Accepted
time: 106ms
memory: 4024kb

input:

999997
0 790870149 10 312341665 750583643
4 384702127 1 220708338 372080663
2 662285387 10 14637938 407944387
0 473613609 3 314642869 447537089
4 773947983 9 367385950 465660605
5 473869581 14 442534885 461613235
0 726983133 1 417689049 679009425
5 221083595 5 123544654 169809378
0 872038508 7 57750...

output:

438241978
1
-1
132894220
-1
-1
261320376
-1
256026211
81434046
-1
483828385
1
-1
1
-1
-1
1
1
1
-1
-1
316297589
-1
-1
-1
-1
138841964
1
-1
1
149402190
28459733
-1
-1
-1
1
1
1
1
172487273
78450129
5779513
-1
1
-1
-1
-1
84682459
-1
-1
7655353
-1
-1
1
-1
-1
-1
-1
1
-1
-1
391436221
-1
-1
1
52970836
-1
-1...

result:

ok 999997 lines

Test #23:

score: 0
Accepted
time: 102ms
memory: 3936kb

input:

999996
0 76059652 6 27025196 72899785
4 140538090 3 140356967 140371077
0 622180150 1 386081350 473991190
3 167821189 5 37470414 135098524
3 8637942 15 984215 5958852
1 51022707 6 15376414 50059575
0 443750923 11 345920051 385212659
3 459487380 15 354903169 361806660
4 562178684 12 325063103 5252331...

output:

45874589
-1
87909840
-1
-1
1
39292608
-1
-1
1
-1
-1
-1
-1
20865528
-1
1
-1
1
-1
1
-1
1
-1
-1
-1
1
-1
67152271
-1
-1
77079066
1
-1
1
-1
40195106
-1
-1
1
169344308
10313868
1
1
50691532
1
-1
1
-1
1
-1
1
-1
-1
-1
1
-1
-1
1
-1
-1
-1
22802409
-1
1
1
-1
-1
-1
1
31178015
-1
-1
-1
1
-1
-1
14200880
1
-1
2356...

result:

ok 999996 lines

Test #24:

score: 0
Accepted
time: 104ms
memory: 4028kb

input:

1000000
5 6 9 2 5
0 6 6 1 5
5 6 1 3 4
5 5 10 4 5
5 8 7 2 3
2 8 9 3 4
5 7 9 1 6
3 9 9 7 9
5 8 1 1 4
5 2 6 1 2
2 2 3 1 2
5 7 7 5 7
0 10 7 2 3
0 8 1 2 6
0 6 3 1 6
5 10 4 6 7
0 4 6 3 4
4 8 5 5 6
0 5 2 3 5
3 3 8 2 3
0 3 6 2 3
0 5 10 2 4
0 9 4 6 9
0 2 2 1 2
5 9 5 3 7
0 2 7 1 2
4 4 7 1 3
0 10 1 1 2
5 2 1 1...

output:

-1
4
1
-1
-1
-1
-1
-1
1
-1
-1
-1
1
4
5
-1
1
-1
2
-1
1
2
3
1
-1
1
-1
1
1
-1
1
1
2
1
1
-1
1
-1
1
-1
-1
-1
-1
-1
3
2
-1
-1
-1
-1
-1
-1
-1
-1
-1
2
6
1
-1
5
-1
-1
-1
-1
2
1
1
1
1
-1
-1
-1
-1
5
-1
-1
-1
1
-1
2
-1
-1
1
-1
-1
-1
-1
-1
2
-1
-1
-1
1
-1
-1
-1
1
-1
-1
3
1
-1
2
-1
1
-1
1
-1
-1
-1
3
1
-1
-1
1
-1
...

result:

ok 1000000 lines

Test #25:

score: 0
Accepted
time: 108ms
memory: 4204kb

input:

999999
0 5 8 4 5
2 5 3 1 3
3 5 5 4 5
1 3 10 1 3
5 8 3 2 6
5 7 2 1 5
3 9 10 6 9
2 5 1 1 4
4 6 7 3 5
3 3 4 1 3
5 10 10 7 9
1 6 4 5 6
5 10 7 2 10
4 7 2 6 7
4 7 10 6 7
2 6 10 4 5
5 8 4 5 6
1 4 6 3 4
3 5 5 1 5
5 4 9 2 3
3 5 5 3 4
1 5 4 4 5
0 10 8 1 4
3 5 9 1 4
5 8 6 5 6
2 8 6 2 3
3 4 3 3 4
3 8 2 6 7
1 10...

output:

1
-1
-1
-1
-1
1
-1
1
-1
-1
-1
2
-1
1
-1
-1
-1
-1
-1
-1
-1
-1
3
-1
-1
-1
-1
2
-1
1
-1
-1
1
-1
1
-1
1
-1
-1
2
-1
1
2
1
-1
1
3
-1
-1
-1
1
1
-1
2
-1
-1
-1
-1
2
-1
-1
2
2
-1
-1
-1
1
-1
-1
-1
-1
1
1
-1
-1
2
-1
-1
-1
-1
-1
-1
3
-1
1
-1
-1
-1
-1
-1
1
-1
-1
1
1
-1
1
1
-1
1
1
-1
-1
1
-1
-1
-1
-1
-1
1
-1
-1
-1...

result:

ok 999999 lines

Test #26:

score: 0
Accepted
time: 104ms
memory: 4188kb

input:

999998
4 5 4 3 5
1 8 9 3 6
4 10 9 3 7
4 2 2 1 2
5 3 3 1 2
1 2 5 1 2
2 4 3 3 4
3 4 6 2 4
5 9 6 6 8
0 6 8 4 5
3 8 4 4 6
4 8 3 4 5
4 5 6 3 5
1 10 9 7 8
5 6 5 5 6
5 8 3 5 6
2 8 5 4 8
1 10 9 5 9
5 10 7 1 9
5 8 2 4 7
0 5 4 4 5
1 10 5 3 9
0 4 5 3 4
2 8 2 5 7
4 3 2 1 3
3 7 9 3 6
1 9 4 4 6
3 9 1 7 8
3 7 6 1 ...

output:

-1
-1
-1
-1
-1
-1
-1
-1
-1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1
1
1
1
2
-1
-1
3
1
-1
1
2
1
-1
-1
-1
1
1
2
-1
-1
1
-1
-1
-1
-1
-1
4
-1
-1
-1
-1
3
-1
-1
1
-1
1
-1
-1
1
1
-1
2
2
1
1
2
-1
2
-1
-1
-1
1
-1
2
-1
-1
-1
1
-1
-1
-1
1
-1
-1
-1
-1
1
4
-1
-1
1
1
-1
2
-1
-1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
1
-1
-1
-1
1
...

result:

ok 999998 lines

Test #27:

score: 0
Accepted
time: 96ms
memory: 4068kb

input:

999997
0 9 10 1 3
4 7 1 6 7
2 2 10 1 2
0 3 8 1 3
4 3 4 2 3
5 6 4 5 6
0 6 1 2 6
5 8 5 4 5
0 5 7 3 5
2 7 2 1 7
3 8 1 3 6
0 10 2 4 5
1 8 7 4 5
3 2 9 1 2
1 9 10 5 9
5 4 6 1 4
3 3 9 2 3
1 3 7 2 3
1 9 6 3 5
1 2 5 1 2
5 10 3 7 9
3 3 6 2 3
0 7 5 1 6
3 5 4 4 5
2 2 8 1 2
3 6 5 1 5
3 5 10 1 2
0 5 9 4 5
1 2 5 1...

output:

2
1
-1
2
-1
-1
4
-1
2
6
1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
5
-1
-1
-1
-1
1
-1
4
2
3
1
-1
-1
-1
3
2
1
-1
-1
1
3
-1
1
-1
-1
-1
1
-1
-1
1
-1
-1
1
-1
-1
-1
-1
1
-1
-1
1
-1
-1
-1
3
-1
1
-1
-1
-1
1
2
-1
-1
-1
-1
-1
1
2
1
-1
-1
1
-1
6
-1
-1
-1
-1
3
-1
1
-1
-1
-1
-1
2
-1
1
1
-1
-1
1
1
1
1
1
-1
-1
-1
2
1
-1
-...

result:

ok 999997 lines

Test #28:

score: 0
Accepted
time: 103ms
memory: 4192kb

input:

999996
0 4 1 2 3
4 3 3 2 3
0 7 6 1 7
3 7 5 6 7
3 3 5 1 2
1 6 1 2 6
0 10 6 2 10
3 3 10 2 3
4 2 2 1 2
1 9 8 5 6
5 8 6 6 8
3 8 7 3 6
5 8 8 3 5
2 4 1 2 3
2 2 7 1 2
3 6 3 5 6
1 10 9 8 10
5 5 6 4 5
1 5 5 2 3
4 7 3 6 7
1 2 8 1 2
3 8 3 1 7
1 2 3 1 2
2 9 3 3 5
5 6 2 5 6
3 4 3 3 4
1 5 2 2 3
5 7 2 1 4
0 2 8 1 ...

output:

1
-1
6
-1
-1
1
8
-1
-1
-1
-1
-1
-1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
2
-1
2
1
1
1
-1
2
-1
-1
-1
-1
-1
-1
1
-1
2
1
1
-1
1
2
-1
1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
2
-1
1
-1
2
-1
-1
-1
-1
-1
-1
-1
1
1
-1
-1
-1
-1
-1
4
1
2
1
-1
1
2
2
-1
-1
-1
1
-1
-1
2
1
1
-1
1
1
-1
-1
1
-1
-1
-1
-1
-1
1
-1
1
-1
2
5
1
-1
-1
...

result:

ok 999996 lines

Extra Test:

score: 0
Extra Test Passed