#include <bits/stdc++.h>
using namespace std;
const int N = 6e5 + 5;
const long long mod = 1e9 + 7;
long long n, m, t, k, a[N], tong, ans, u, v, h[N], b[N], pos[N], d[N];
priority_queue<long long, vector<long long>, greater<long long> > pq;
long long c[N];
struct dang {
  long long lc, rc, val, num;
} st[N * 4];
pair<long long, long long> p[N];
vector<long long> adj[N], kq;
vector<pair<long long, long long> > w;
long long pw(long long k, long long n) {
  long long total = 1;
  for (; n; n >>= 1) {
    if (n & 1) total = (total * k) % mod;
    k = (k * k) % mod;
  }
  return total;
}
string s;
void build(long long id, long long l, long long r) {
  if (l == r) {
    if (a[l] == -1) {
      st[id].val = st[id].lc = st[id].rc = st[id].num = 0;
    } else {
      st[id].val = 0;
      st[id].lc = a[l] % mod;
      st[id].rc = a[l] * c[1] % mod;
      st[id].num = 1;
    }
    return;
  }
  long long mid = (l + r) / 2;
  build(id * 2, l, mid);
  build(id * 2 + 1, mid + 1, r);
  st[id].val =
      (st[id * 2].val + st[id * 2 + 1].val +
       (st[id * 2].lc * st[id * 2 + 1].rc % mod * c[st[id * 2].num] % mod)) %
      mod;
  st[id].num = st[id * 2].num + st[id * 2 + 1].num;
  st[id].lc =
      (st[id * 2].lc + st[id * 2 + 1].lc * b[st[id * 2].num] % mod) % mod;
  st[id].rc =
      (st[id * 2].rc + st[id * 2 + 1].rc * c[st[id * 2].num] % mod) % mod;
}
void update(long long id, long long l, long long r) {
  if (l == r) {
    if (v == -1) {
      st[id].val = st[id].lc = st[id].rc = st[id].num = 0;
    } else {
      st[id].val = 0;
      st[id].lc = v % mod;
      st[id].rc = v * c[1] % mod;
      st[id].num = 1;
    }
    return;
  }
  long long mid = (l + r) / 2;
  if (mid >= u)
    update(id * 2, l, mid);
  else
    update(id * 2 + 1, mid + 1, r);
  st[id].val =
      (st[id * 2].val + st[id * 2 + 1].val +
       st[id * 2].lc * st[id * 2 + 1].rc % mod * c[st[id * 2].num] % mod) %
      mod;
  st[id].num = st[id * 2].num + st[id * 2 + 1].num;
  st[id].lc =
      (st[id * 2].lc + st[id * 2 + 1].lc % mod * b[st[id * 2].num] % mod) % mod;
  st[id].rc =
      (st[id * 2].rc + st[id * 2 + 1].rc % mod * c[st[id * 2].num] % mod) % mod;
}
void sol() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    kq.push_back(a[i]);
  }
  b[0] = c[0] = 1;
  for (int i = 1; i <= n; i++) {
    b[i] = b[i - 1] * 2 % mod;
    c[i] = pw(b[i], mod - 2);
  }
  cin >> m;
  for (int i = 1; i <= m; i++) {
    cin >> p[i].first >> p[i].second;
    kq.push_back(p[i].second);
  }
  sort(kq.begin(), kq.end());
  kq.erase(unique(kq.begin(), kq.end()), kq.end());
  for (int i = 1; i <= n; i++) {
    t = lower_bound(kq.begin(), kq.end(), a[i]) - kq.begin() + 2;
    ++pos[t];
  }
  for (int i = 1; i <= m; i++) {
    t = lower_bound(kq.begin(), kq.end(), p[i].second) - kq.begin() + 2;
    ++pos[t];
  }
  for (int i = 1; i <= kq.size(); i++) {
    pos[i] += pos[i - 1];
  }
  for (int i = 1; i <= n; i++) {
    t = lower_bound(kq.begin(), kq.end(), a[i]) - kq.begin() + 1;
    u = pos[t] + d[t] + 1;
    v = a[i];
    update(1, 1, m + n);
    ++d[t];
  }
  cout << st[1].val << '\n';
  for (int i = 1; i <= m; i++) {
    t = lower_bound(kq.begin(), kq.end(), a[p[i].first]) - kq.begin() + 1;
    u = pos[t] + d[t];
    v = -1;
    update(1, 1, m + n);
    --d[t];
    t = lower_bound(kq.begin(), kq.end(), p[i].second) - kq.begin() + 1;
    a[p[i].first] = p[i].second;
    u = pos[t] + d[t] + 1;
    v = p[i].second;
    update(1, 1, m + n);
    ++d[t];
    cout << st[1].val << '\n';
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  if (fopen("mincross"
            ".in",
            "r")) {
    freopen(
        "mincross"
        ".in",
        "r", stdin);
    freopen(
        "mincross"
        ".out",
        "w", stdout);
  }
  int ntest = 1;
  while (ntest-- > 0) sol();
}
