#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC target("sse4")
using namespace std;
template <class T>
bool ckmin(T& a, const T& b) {
  return b < a ? a = b, 1 : 0;
}
template <class T>
bool ckmax(T& a, const T& b) {
  return a < b ? a = b, 1 : 0;
}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int MOD = 1000000007;
const char nl = '\n';
const int MX = 100001;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  string S;
  cin >> S;
  int N = (int)(S).size();
  bool rem[N];
  int cnt[N];
  vector<char> st;
  st.push_back('a' - 1);
  char ld = 'a' - 1;
  int cur = N - 2;
  rem[N - 1] = true;
  cnt[N - 1] = 1;
  while (cur >= 0) {
    if (S[cur] == S[cur + 1]) {
      if (!rem[cur + 1]) {
        st.push_back(S[cur + 1]);
        if (st[(int)(st).size() - 2] != st[(int)(st).size() - 1])
          ld = st[(int)(st).size() - 2];
      }
      rem[cur] = rem[cur + 1];
      cnt[cur] = cnt[cur + 1] + 1;
    } else {
      if (!rem[cur + 1] || cnt[cur + 1] % 2) {
        st.push_back(S[cur + 1]);
        if (st[(int)(st).size() - 2] != st[(int)(st).size() - 1])
          ld = st[(int)(st).size() - 2];
      }
      if (S[cur] > st[(int)(st).size() - 1] ||
          (S[cur] == st[(int)(st).size() - 1] && S[cur] > ld)) {
        rem[cur] = true;
      } else {
        rem[cur] = false;
      }
      cnt[cur] = 1;
    }
    cur--;
  }
  if (!rem[0] || cnt[0] % 2) {
    st.push_back(S[0]);
  }
  for (int i = 0; i < (N); i++) {
    cout << (int)(st).size() - 1 << " ";
    if ((int)(st).size() > 11) {
      for (int i = 0; i < (5); i++) {
        cout << st[(int)(st).size() - i - 1];
      }
      cout << "..." << st[2] << st[1] << nl;
    } else {
      for (int i = ((int)(st).size()) - 1; i >= 1; i--) {
        cout << st[i];
      }
      cout << nl;
    }
    if (rem[i]) {
      if (cnt[i] % 2) {
        st.pop_back();
      } else {
        st.push_back(S[i]);
      }
    } else {
      st.pop_back();
    }
  }
  return 0;
}
