#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;   }   