#include <bits/stdc++.h>
using namespace std;
char buffer[1000005];
char str[1000005];
vector<vector<int>> loop;
int n;
int op(int k, int d) {
  int t = -1;
  strcpy(buffer, str);
  loop.clear();
  vector<int> nxt(k);
  vector<int> pre(k + 1);
  vector<int> vis(k + 1);
  vector<int> lpi(k + 1);
  vector<int> lpj(k + 1);
  for (int i = 0; i < d; ++i)
    for (int j = 0;; ++j) {
      if (j * d + i >= k) break;
      pre[t + 1] = j * d + i;
      nxt[j * d + i] = t++;
    }
  pre[k] = -1;
  for (int i = 0; i < k; ++i)
    if (!vis[i]) {
      vector<int> temp;
      loop.push_back(temp);
      int tp = loop.size() - 1;
      int p = i;
      while (p <= k && !vis[p]) {
        vis[p] = 1;
        lpi[p] = tp;
        lpj[p] = loop[tp].size();
        loop[tp].push_back(p - 1);
        p = pre[p] + 1;
      }
    }
  for (int i = 0; i < n; ++i) {
    if (i < k - 1) {
      if (lpi[i + 1] == 0) {
        t = min(lpj[i + 1], n - k + 1);
        str[loop[0][lpj[i + 1] - t] + t] = buffer[i];
      } else {
        t = n - k + 1;
        t = lpj[i + 1] - t;
        int sz = loop[lpi[i + 1]].size();
        t %= sz;
        t += sz;
        t %= sz;
        str[loop[lpi[i + 1]][t] + n - k + 1] = buffer[i];
      }
    } else {
      t = min(n - k + 1 - (i - k + 1), lpj[k]);
      str[loop[0][lpj[k] - t] + t + (i - k + 1)] = buffer[i];
    }
  }
  str[n] = 0;
  return 0;
}
int main() {
  scanf("%s", str);
  n = strlen(str);
  int m;
  cin >> m;
  int k, d;
  for (int i = 0; i < m; ++i) {
    scanf("%d%d", &k, &d);
    op(k, d);
    printf(str);
    putchar('\n');
  }
  return 0;
}
