#include <bits/stdc++.h>
using namespace std;
const int MN = 1e6 + 100;
int used[MN];
int used2[MN];
string f(string& s, int k, int d) {
  if (s.size() == 1) return s;
  for (int i = 0; i < k; ++i) {
    used[i] = -1;
  }
  vector<int> lol;
  vector<int> lol2(k);
  for (int i = 0; i < d; ++i) {
    for (int j = 0; j * d + i < k; ++j) {
      lol.push_back(j * d + i);
    }
  }
  for (int i = 0; i < k; ++i) {
    lol2[lol[i]] = i;
  }
  vector<vector<int> > dp;
  vector<int> x(k);
  for (int i = 0; i < k; ++i) {
    if (used[i] != -1) continue;
    int q = i;
    vector<int> v;
    v.push_back(q);
    used2[q] = 1;
    while (1) {
      int w = lol2[q] - 1;
      if (used2[w]) {
        for (int j = v.size() - 1; j >= 0; --j) {
          used[v[j]] = dp.size();
        }
        dp.push_back(vector<int>());
        for (int j = v.size() - 1; j >= 0; --j) {
          x[v[j]] = dp.back().size();
          dp.back().push_back(v[j]);
          used2[v[j]] = 0;
        }
        break;
      }
      if (w == -1) {
        for (int j = v.size() - 1; j >= 0; --j) {
          used[v[j]] = dp.size();
        }
        dp.push_back(vector<int>());
        dp.back().push_back(-1);
        for (int j = v.size() - 1; j >= 0; --j) {
          x[v[j]] = dp.back().size();
          dp.back().push_back(v[j]);
          used2[v[j]] = 0;
        }
        break;
      }
      if (used[w] != -1) {
        for (int j = v.size() - 1; j >= 0; --j) {
          used[v[j]] = used[w];
        }
        for (int j = v.size() - 1; j >= 0; --j) {
          x[v[j]] = dp[used[w]].size();
          dp[used[w]].push_back(v[j]);
          used[v[j]] = used[w];
          used2[v[j]] = 0;
        }
        break;
      }
      v.push_back(w);
      used2[w] = 1;
      q = w;
    }
  }
  int n = s.size() - k + 1;
  string ans = s;
  for (int i = 0; i < ans.size(); ++i) {
    ans[i] = '.';
  }
  for (int i = 0; i < k; ++i) {
    int q = used[i];
    int w = x[i];
    if (dp[q][0] == -1) {
      if (n >= w) {
        ans[i - dp[q][w] + w - 1] = s[i];
      } else {
        ans[i - dp[q][w] + n + dp[q][w - n]] = s[i];
      }
    } else {
      int mod = dp[q].size();
      ans[i - dp[q][w] + n + dp[q][(((w - n) % mod) + mod) % mod]] = s[i];
    }
  }
  for (int i = k; i < s.size(); ++i) {
    --n;
    int q = used[k - 1];
    int w = x[k - 1];
    if (dp[q][0] == -1) {
      if (n >= w) {
        ans[i - dp[q][w] + w - 1] = s[i];
      } else {
        ans[i - dp[q][w] + n + dp[q][w - n]] = s[i];
      }
    } else {
      int mod = dp[q].size();
      ans[i - dp[q][w] + n + dp[q][(((w - n) % mod) + mod) % mod]] = s[i];
    }
  }
  return ans;
}
int main() {
  string s;
  int n;
  cin >> s >> n;
  for (int i = 0; i < n; ++i) {
    int k, d;
    scanf("%d %d", &k, &d);
    if (s.size() > 1) s = f(s, k, d);
    printf("%s\n", s.c_str());
  }
}
