#include <bits/stdc++.h>
using namespace std;
template <class T>
bool setmax(T &_a, T _b) {
  if (_b > _a) {
    _a = _b;
    return true;
  }
  return false;
}
template <class T>
bool setmin(T &_a, T _b) {
  if (_b < _a) {
    _a = _b;
    return true;
  }
  return false;
}
template <class T>
T gcd(T _a, T _b) {
  return _b == 0 ? _a : gcd(_b, _a % _b);
}
const int MAXN = 1000010;
const int MAXLog = 20;
char s[MAXN], tmp[MAXN];
int n, m;
int lnk[MAXN], go[MAXN][MAXLog];
int a[MAXN], b[MAXN];
void solve(int k, int d0) {
  int cur = 0;
  for (int j = int(0); j <= int((d0)-1); ++j)
    for (int i = j; i < k; i += d0) a[cur++] = i;
  assert(cur == k);
  int maxlog = 0;
  while ((1 << maxlog) <= n) ++maxlog;
  for (int i = int(0); i <= int((k)-1); ++i) lnk[i] = a[i] + 1;
  lnk[k] = k;
  for (int i = int(0); i <= int((k + 1) - 1); ++i) go[i][0] = lnk[i];
  for (int j = int(1); j <= int(maxlog - 1); ++j)
    for (int i = int(0); i <= int((k + 1) - 1); ++i)
      go[i][j] = go[go[i][j - 1]][j - 1];
  for (int i = int(0); i <= int((n)-1); ++i) {
    int init = max(0, i - n + k), init_pos = i - init;
    int steps = min(i, n - k) + 1, rest = steps;
    int x = init;
    for (int j = int((maxlog)-1); j >= int(0); --j)
      if (rest >= (1 << j)) {
        int y = go[x][j];
        if (y != k) {
          x = y;
          rest -= (1 << j);
        }
      }
    if (x != k && rest > 0) {
      --rest;
      x = go[x][0];
    }
    int pos = init_pos - (steps - rest);
    b[i] = pos + x;
  }
  for (int i = int(0); i <= int((n)-1); ++i) tmp[i] = s[b[i]];
  for (int i = int(0); i <= int((n)-1); ++i) s[i] = tmp[i];
}
int main() {
  gets(s);
  n = (int)strlen(s);
  scanf("%d", &m);
  while (m--) {
    int k, d;
    scanf("%d%d", &k, &d);
    solve(k, d);
    s[n] = '\0';
    puts(s);
  }
  return 0;
}
