#include <bits/stdc++.h>
using namespace std;
const int N = 2e4 + 5;
char s[N];
int dp[10][N];
int ans[N];
int len;
int dfs(int num, int idx) {
  if (~dp[num][idx]) return dp[num][idx];
  if (idx == len)
    return 1;
  else if (idx > len)
    return 0;
  int &ret = dp[num][idx];
  ret = dfs(num ^ 1, idx + num);
  bool flag = false;
  for (int i = idx; i < idx + num; ++i) {
    if (s[i] != s[i + num]) {
      flag = true;
      break;
    }
  }
  if (flag) {
    ret = max(ret, dfs(num, idx + num));
  }
  return ret;
}
const int B = 333;
int cal(char a, char b, char c) { return a * B * B + b * B + c; }
int cal(char a, char b) { return a * B * B + b * B; }
void prt(int x) {
  printf("%c", x / (B * B));
  printf("%c", x % (B * B) / B);
  if (x % B) {
    printf("%c", x % B);
  }
  puts("");
}
int main() {
  while (~scanf("%s", s)) {
    memset(dp, -1, sizeof(dp));
    int cnt = 0;
    len = strlen(s);
    for (int i = len - 2; i >= 5; --i) {
      if (dfs(2, i) == 1) {
        ans[cnt++] = (cal(s[i], s[i + 1]));
      }
      if (dfs(3, i) == 1) {
        ans[cnt++] = (cal(s[i], s[i + 1], s[i + 2]));
      }
    }
    sort(ans, ans + cnt);
    cnt = unique(ans, ans + cnt) - ans;
    printf("%d\n", cnt);
    for (int i = 0; i < cnt; ++i) {
      prt(ans[i]);
    }
  }
  return 0;
}
