#include <bits/stdc++.h>
using std::cerr;
using std::cin;
using std::cout;
using std::deque;
using std::endl;
using std::fixed;
using std::ios_base;
using std::make_pair;
using std::map;
using std::max;
using std::min;
using std::ostream;
using std::pair;
using std::set;
using std::setprecision;
using std::string;
using std::stringstream;
using std::swap;
using std::vector;
using namespace std;
vector<long long> mnoz(vector<long long> a, vector<long long> b) {
  vector<long long> c;
  for (long long i = 0; i < (long long)(a.size()); ++i) {
    c.push_back(a[b[i]]);
  }
  return c;
}
vector<long long> pot(vector<long long> a, long long b) {
  vector<long long> wynik;
  for (long long i = 0; i < (long long)(a.size()); ++i) {
    wynik.push_back(i);
  }
  while (b != 0) {
    if (b & 1) {
      wynik = mnoz(wynik, a);
      b--;
    } else {
      a = mnoz(a, a);
      b /= 2;
    }
  }
  return wynik;
}
char sarr[1000 * 1000 + 5];
int main() {
  ios_base::sync_with_stdio(0);
  scanf("%s", sarr);
  string s(sarr);
  long long m;
  scanf("%I64d", &m);
  for (long long i = 0; i < (long long)(m); ++i) {
    long long k, d;
    scanf("%I64d%I64d", &k, &d);
    if (d == 1) {
      printf("%s\n", s.c_str());
      continue;
    }
    vector<long long> perm;
    for (long long i = 0; i < (long long)(s.size()); ++i) {
      perm.push_back((i + 1) % s.size());
    }
    vector<long long> sorted;
    for (long long i = 0; i < (long long)(s.size()); ++i) {
      sorted.push_back(i);
    }
    long long dpos = 0;
    long long curPos = 0;
    for (long long i = 0; i < (long long)(k); ++i) {
      if (curPos >= k) {
        dpos++;
        curPos = dpos;
      }
      sorted[i] = curPos;
      curPos += d;
    }
    vector<long long> temp = pot(mnoz(sorted, perm), s.size() - k + 1);
    temp = mnoz(temp, pot(perm, k - 1));
    string temp2;
    for (long long i = 0; i < (long long)(temp.size()); ++i) {
      temp2.push_back(s[temp[i]]);
    }
    printf("%s\n", temp2.c_str());
    s = temp2;
  }
  return 0;
}
