#include <bits/stdc++.h>
using namespace std;
int gi() {
  int res = 0, w = 1;
  char ch = getchar();
  while (ch != '-' && !isdigit(ch)) ch = getchar();
  if (ch == '-') w = -1, ch = getchar();
  while (isdigit(ch)) res = res * 10 + ch - '0', ch = getchar();
  return res * w;
}
const int MAX_N = 2e5 + 5;
char s[MAX_N];
pair<int, int> stk[MAX_N];
int N, M, top, ALL, cnt[26], buc[MAX_N];
int last_len;
int mx, nw;
void del(int i) { buc[cnt[i]]--, cnt[i]--, buc[cnt[i]]++; }
void upd() {
  while (mx && !buc[mx]) --mx;
}
void add(int i, bool op) {
  if (op) {
    del(stk[top].second);
    del(stk[i].second);
    ALL -= 2;
    printf("%d %d\n", nw + 1, nw + stk[i].first);
    upd();
    nw -= stk[top].first;
    if (i + 1 <= M)
      stk[i + 1].first += stk[top].first;
    else
      last_len += stk[top].first;
    --top;
  } else {
    stk[++top] = stk[i];
    nw += stk[i].first;
  }
}
void solve() {
  scanf("%s", s + 1);
  N = strlen(s + 1);
  M = ALL = 0;
  int lst = 1;
  for (int i = 2; i <= N; i++)
    if (s[i] == s[i - 1]) {
      cnt[s[i] - 'a']++, ALL++;
      stk[++M] = make_pair(i - lst, (int)(s[i] - 'a'));
      lst = i;
    }
  last_len = N + 1 - lst;
  mx = 0;
  for (int i = 0; i < 26; i++) {
    buc[cnt[i]]++;
    mx = max(mx, cnt[i]);
  }
  printf("%d\n", 1 + max(mx, (ALL + 1) >> 1));
  if (mx << 1 < ALL) {
    top = nw = 0;
    for (int i = 1; i <= M; i++)
      add(i, top && stk[top].second != stk[i].second && mx << 1 < ALL);
    M = top;
  }
  int mxid = -1;
  for (int i = 0; i < 26; i++)
    if (cnt[i] == mx) mxid = i;
  top = nw = 0;
  for (int i = 1; i <= M; i++)
    add(i, top && ((stk[top].second == mxid) ^ (stk[i].second == mxid)));
  for (int i = 1; i <= top; i++) printf("%d %d\n", 1, stk[i].first);
  printf("%d %d\n", 1, last_len);
  memset(cnt, 0, sizeof(cnt));
  for (int i = 0; i <= mx; i++) buc[i] = 0;
}
int main() {
  int Q = gi();
  while (Q--) solve();
  return 0;
}
