#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void OA(const T &a, const int &st, const int &ed) {
  if (ed >= st) cout << a[st];
  int i;
  for (i = (st + 1); i <= (ed); i++) cout << ' ' << a[i];
  puts("");
}
const double PI = acos(-1.0);
const double EPS = 1e-10;
const int MAXN = 111111;
const int MAXM = 33;
struct Sub {
  int st, len;
  Sub() {}
  Sub(int x, int y) {
    st = x;
    len = y;
  }
} g[22222];
char s[MAXN];
int an;
bool c[22222];
bool d[22222];
int e[22222][4];
bool a[22222][4][4];
bool cmp(Sub x, Sub y) {
  int len = min(x.len, y.len);
  int i;
  for (i = 0; i < (len); i++) {
    if (s[x.st + i] < s[y.st + i])
      return true;
    else if (s[x.st + i] > s[y.st + i])
      return false;
  }
  if (x.len < y.len)
    return true;
  else
    return false;
}
int cal(int x, int y) {
  if (e[x][y] != -1) return e[x][y];
  if (y == 3) {
    if (e[x][2] == -1) e[x][2] = (s[x + 0] - 'a' + 1) * 27 + s[x + 1] - 'a' + 1;
    e[x][3] = e[x][2] * 27 + s[x + 2] - 'a' + 1;
    return e[x][3];
  }
  e[x][2] = (s[x + 0] - 'a' + 1) * 27 + s[x + 1] - 'a' + 1;
  return e[x][2];
}
void add(int x, int y, int z) {
  if (!c[y]) {
    c[y] = true;
    g[an] = Sub(x, z);
    an++;
  }
}
void dfs(int x, int prey, int preyn) {
  int y;
  if (!a[x - 1][2][preyn]) {
    a[x - 1][2][preyn] = true;
    y = cal(x - 1, 2);
    if (prey != y && x - 1 >= 5) {
      add(x - 1, y, 2);
      dfs(x - 2, y, 2);
    }
  }
  if (!a[x - 2][3][preyn]) {
    a[x - 2][3][preyn] = true;
    y = cal(x - 2, 3);
    if (prey != y && x - 2 >= 5) {
      add(x - 2, y, 3);
      dfs(x - 3, y, 3);
    }
  }
}
int farm() {
  int len = strlen(s);
  memset(c, 0, sizeof(c));
  memset(d, 0, sizeof(d));
  memset(a, 0, sizeof(a));
  memset(e, -1, sizeof(e));
  an = 0;
  dfs(len - 1, 0, 0);
  sort(g, g + an, cmp);
  return an;
}
int main() {
  int i, j;
  scanf("%s", s);
  int ans = farm();
  printf("%d\n", ans);
  ;
  for (i = 0; i < (ans); i++) {
    for (j = 0; j < g[i].len; j++) putchar(s[g[i].st + j]);
    puts("");
  }
  return 0;
}
