#include <bits/stdc++.h>
using namespace std;
using ll = long long int;
ll quicmod(ll a, ll b, ll Mod) {
  ll ans = 1;
  while (b) {
    if (b & 1) {
      ans = 1ll * ans * a % Mod;
    }
    a = 1ll * a * a % Mod;
    b >>= 1;
  }
  return ans;
}
const ll Maxn = 300000;
const ll Mod = 1000000007;
const ll Inf = 1000000000;
struct Question {
  ll x, v;
} ask[Maxn + 5];
struct Segment_Node {
  ll l, r;
  ll l_val, r_val;
  ll sz, val;
} seg[(Maxn << 3) + 5];
ll& lson(ll now) { return seg[now].l; }
ll& rson(ll now) { return seg[now].r; }
ll p[Maxn + 5];
ll pos[Maxn << 1 | 5];
ll Root, id_tot;
ll power_2[Maxn + 5], inv_2[Maxn + 5];
void init() {
  power_2[0] = 1;
  inv_2[0] = 1;
  power_2[1] = 2;
  inv_2[1] = quicmod(2, Mod - 2, Mod);
  for (ll i = 2; i <= Maxn; i++) {
    inv_2[i] = inv_2[i - 1] * inv_2[1] % Mod;
    power_2[i] = (power_2[i - 1] * 2) % Mod;
  }
}
void push_up(ll now) {
  seg[now].sz = seg[lson(now)].sz + seg[rson(now)].sz;
  seg[now].l_val =
      (seg[lson(now)].l_val +
       1ll * seg[rson(now)].l_val * power_2[seg[lson(now)].sz] % Mod) %
      Mod;
  seg[now].r_val = (seg[lson(now)].r_val + 1ll * seg[rson(now)].r_val *
                                               inv_2[seg[lson(now)].sz] % Mod) %
                   Mod;
  seg[now].val = (seg[lson(now)].val + seg[rson(now)].val +
                  1ll * seg[lson(now)].l_val * seg[rson(now)].r_val % Mod *
                      inv_2[seg[lson(now)].sz] % Mod) %
                 Mod;
}
void insert(ll x, ll a, ll& root = Root, ll left = 1, ll right = Inf) {
  if (root == 0) {
    root = ++id_tot;
  }
  if (left == right) {
    if (a == 1) {
      seg[root].sz = 1;
      seg[root].l_val = pos[x];
      seg[root].r_val = 1ll * pos[x] * inv_2[1] % Mod;
      seg[root].val = 0;
    } else {
      seg[root].sz = 0;
      seg[root].l_val = 0;
      seg[root].r_val = 0;
      seg[root].val = 0;
    }
    return;
  }
  ll mid = (left + right) >> 1;
  if (x <= mid) {
    insert(x, a, lson(root), left, mid);
  } else {
    insert(x, a, rson(root), mid + 1, right);
  }
  push_up(root);
}
int main() {
  multimap<ll, ll> mp;
  init();
  ll n;
  cin >> n;
  for (ll i = 1; i <= n; i++) {
    cin >> p[i];
    mp.insert(make_pair(p[i], 0));
  }
  ll q;
  cin >> q;
  for (ll i = 1; i <= q; i++) {
    cin >> ask[i].x;
    cin >> ask[i].v;
    mp.insert(make_pair(ask[i].v, 0));
  }
  multimap<ll, ll>::iterator it;
  it = mp.begin();
  ll id_tot = 0;
  while (it != mp.end()) {
    (it->second) = ++id_tot;
    pos[id_tot] = (it->first);
    it++;
  }
  for (ll i = 1; i <= n; i++) {
    it = mp.lower_bound(p[i]);
    p[i] = (it->second);
    mp.erase(it);
  }
  for (ll i = 1; i <= q; i++) {
    it = mp.lower_bound(ask[i].v);
    ask[i].v = (it->second);
    mp.erase(it);
  }
  for (ll i = 1; i <= n; i++) insert(p[i], 1);
  printf("%d\n", seg[Root].val);
  for (ll i = 1; i <= q; i++) {
    insert(p[ask[i].x], -1);
    p[ask[i].x] = ask[i].v;
    insert(p[ask[i].x], 1);
    printf("%d\n", seg[Root].val);
  }
  return 0;
}
