#include <bits/stdc++.h>
using namespace std;
const long long M = 1e9 + 7, N = 3e5 + 5;
long long p[N], pos[N], x[N], pw[N], pwi[N];
vector<pair<long long, long long> > vec;
pair<long long, long long> b[N];
struct node {
  long long cnt, lsum, rsum, e;
  node() { cnt = lsum = rsum = e = 0; }
  node(long long x) { cnt = 1, lsum = rsum = x, e = 0; }
} t[N * 8];
node add(node l, node r) {
  node t;
  t.cnt = l.cnt + r.cnt;
  t.lsum = (l.lsum + pw[l.cnt] * r.lsum % M) % M;
  t.rsum = (r.rsum + pw[r.cnt] * l.rsum % M) % M;
  t.e = l.e + r.e + l.lsum * r.rsum % M * pwi[t.cnt] % M;
  t.e %= M;
  return t;
}
void upd(long long pos, long long op, long long v = 1, long long tl = 0,
         long long tr = vec.size()) {
  if (tr - tl == 1) {
    if (op == 1)
      t[v] = node(vec[tl].first);
    else
      t[v] = node();
    return;
  }
  long long tm = (tl + tr) / 2;
  if (pos < tm)
    upd(pos, op, v * 2, tl, tm);
  else
    upd(pos, op, v * 2 + 1, tm, tr);
  t[v] = add(t[v * 2], t[v * 2 + 1]);
}
node qry() { return t[1]; }
signed main() {
  std::ios::sync_with_stdio(0);
  std::cin.tie(0);
  ;
  pw[0] = 1;
  for (long long i = 1; i < N; i++) pw[i] = pw[i - 1] * 2 % M;
  pwi[0] = 1;
  for (long long i = 1; i < N; i++) pwi[i] = pwi[i - 1] * 500000004 % M;
  long long n;
  cin >> n;
  for (long long i = 0; i < n; i++) {
    cin >> p[i];
    vec.emplace_back(p[i], i);
    b[i] = {p[i], i};
  }
  long long q;
  cin >> q;
  for (long long i = 0; i < q; i++) {
    cin >> pos[i] >> x[i];
    pos[i]--;
    vec.emplace_back(x[i], -(i + 1));
  }
  sort((vec).begin(), (vec).end());
  for (long long i = 0; i < n; i++) {
    long long pos = lower_bound((vec).begin(), (vec).end(), b[i]) - vec.begin();
    upd(pos, 1);
  }
  cout << qry().e << endl;
  for (long long i = 0; i < q; i++) {
    long long old_pos =
        lower_bound((vec).begin(), (vec).end(), b[pos[i]]) - vec.begin();
    upd(old_pos, 0);
    b[pos[i]] = {x[i], -(i + 1)};
    long long new_pos =
        lower_bound((vec).begin(), (vec).end(), b[pos[i]]) - vec.begin();
    upd(new_pos, 1);
    cout << qry().e % M << endl;
  }
}
