#include <bits/stdc++.h>
using namespace ::std;
const int maxn = 1e7 + 500;
const int mod = 1e9 + 7;
const int inf = 1e9 + 500;
const int maxk = 6002;
char ans[maxn];
int fen[maxn];
int li[maxk];
int ri[maxk];
string s;
vector<int> ve[maxk];
vector<int> vec[maxk];
void update(int x, int v) {
  x++;
  while (x < maxn) {
    fen[x] += v;
    x += (x & (-x));
  }
}
int finds(int x) {
  x++;
  int v = 0;
  int p = 0;
  for (int i = 22; i >= 0; i--) {
    int u = p + (1 << i);
    if (fen[u] + v < x) {
      v += fen[u];
      p = u;
    }
  }
  return p;
}
void f(int q, int k) {
  if (q == -1) {
    for (int i = 0; i <= k; i++) {
      ans[finds(i)] = s[i];
    }
    return;
  }
  int l = li[q];
  int r = ri[q];
  if (r >= k) {
    f(q - 1, k);
    return;
  }
  for (int i = r + 1; i <= r + r - l + 1 && i <= k; i++) {
    ve[q].push_back(finds(i));
    int v = i - (r + 1);
    int x;
    if (v > (r - l + 1) / 2 - 1) {
      v -= ((r - l + 1) / 2 - 1) + 1;
      x = l + (2 * v);
    } else {
      x = (2 * v + 1) + l;
    }
    vec[q].push_back(finds(x));
  }
  for (int i = 0; i < ve[q].size(); i++) {
    update(ve[q][i], -1);
  }
  int w;
  if (r + r - l + 1 <= k) {
    w = k - (r - l + 1);
  } else {
    w = r;
  }
  f(q - 1, w);
  for (int i = 0; i < ve[q].size(); i++) {
    ans[ve[q][i]] = ans[vec[q][i]];
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> s;
  int k;
  cin >> k;
  for (int i = 0; i < k; i++) {
    update(i, 1);
  }
  int q;
  cin >> q;
  for (int qw = 0; qw < q; qw++) {
    cin >> li[qw] >> ri[qw];
    li[qw]--;
    ri[qw]--;
  }
  f(q - 1, k - 1);
  for (int i = 0; i < k; i++) {
    cout << ans[i];
  }
}
