#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
string ans[N];
int len[N];
int dp[N];
string get_ans(const string &add) {
  if (add.size() <= 10) {
    auto res = add;
    reverse(res.begin(), res.end());
    return res;
  }
  string res;
  int t = add.size();
  for (int i = t - 1; i >= t - 5; i--) {
    res += add[i];
  }
  res += "...";
  res += add[1];
  res += add[0];
  return res;
}
bool check(const string &a) {
  int t = a.size();
  if (a[t - 3] < a[t - 1])
    return true;
  else if (a[t - 3] > a[t - 1])
    return false;
  return dp[t - 1] < 0 || a[dp[t - 1]] < a[t - 1];
}
int main() {
  string s;
  cin >> s;
  string a;
  bool pre = 0;
  memset(dp, -1, sizeof(dp));
  for (int i = s.size() - 1; i >= 0; i--) {
    a += s[i];
    int t = a.size();
    if (t > 1) {
      if (a[t - 1] == a[t - 2]) {
        dp[t - 1] = dp[t - 2];
      } else {
        dp[t - 1] = t - 2;
      }
    }
    if (!pre) {
      if (t >= 2) {
        if (a[t - 1] == a[t - 2] && (i + 1 == s.size() || s[i] == s[i + 1]) &&
            (t == 2 || check(a))) {
          a.pop_back();
          a.pop_back();
          pre = 1;
        }
      }
    } else {
      pre = 0;
    }
    len[i] = a.size();
    ans[i] = get_ans(a);
  }
  for (int i = 0; i < s.size(); i++) {
    cout << len[i] << ' ' << ans[i] << endl;
  }
  return 0;
}
