#include using namespace std; template struct SparseTable { vector> table; vector lookup; int LOGV=0, _n; SparseTable(const vector &v) { _n=v.size(); while(_n>>LOGV)LOGV++; table.assign(LOGV,vector(_n)); lookup.resize(_n+1); for(int i = 0; i < _n; i++) table[0][i] = v[i]; for(int i = 1; i < LOGV; i++) { for(int j = 0; j + (1 << i) <= _n; j++) { table[i][j] = op(table[i - 1][j], table[i - 1][j + (1 << (i - 1))]); } } lookup[1] = 0; for(int i = 2; i < lookup.size(); i++) { lookup[i] = lookup[i >> 1] + 1; } } T prod(const int l, const int r){ assert(0 <= l && l <= r && r <= _n); if(l==r)return e(); int b = lookup[r - l]; return op(table[b][l],table[b][r - (1<> n >> m; vector a(n); SparseTable st1(vector(1)); SparseTable st2(vector(1)); vector> b(m); auto f = [&](int l, int r){ int mx = 0, coef = max(a[l], a[r]); if(st1.prod(0, l) > a[l] && a[l] < a[r]) mx = max(mx, max(st1.prod(0, l), coef)); if(st2.prod(0, l) < a[l] && a[l] > a[r]) mx = max(mx, coef); if(a[l] > st2.prod(l + 1, r) && st2.prod(l + 1, r) < a[r]) mx = max(mx, coef); if(a[l] < st1.prod(l + 1, r) && st1.prod(l + 1, r) > a[r]) mx = max(mx, st1.prod(l + 1, r)); if(a[l] > a[r] && a[r] < st1.prod(r, n)) mx = max(mx, max(st1.prod(r, n), coef)); if(a[l] < a[r] && a[r] > st2.prod(r, n)) mx = max(mx, coef); return mx; }; for(int i = 0; i < m; i++){ for(auto &&v: a) cin >> v; st1 = SparseTable(a); st2 = SparseTable(a); b[i] = {0, -i}; for(int j = 0; j < n; j++){ for(int k = j + 1; k < n; k++){ b[i].first += f(j, k); } } } sort(b.rbegin(), b.rend()); cout << -b[0].second << '\n'; }