#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
const int mod = 1e9 + 7;
string second;
int dp[5][N], n;
set<string> ans;
string get(int l, int r) {
  string ans = "";
  if (r < n) ans = second.substr(l, r - l + 1);
  return ans;
}
bool calc(int x, int p) {
  if (p >= n) return 1;
  return dp[x][p];
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> second;
  n = second.size();
  for (int i = n - 1; i >= 0; i--) {
    if (i < 5) continue;
    if (i + 1 < n) {
      if (get(i, i + 1) != get(i + 2, i + 3) && calc(2, i + 2)) {
        dp[2][i] = 1;
        ans.insert(get(i, i + 1));
      }
      if (calc(3, i + 2)) {
        dp[2][i] = 1;
        ans.insert(get(i, i + 1));
      }
    }
    if (i + 3 - 1 < n) {
      if (get(i, i + 2) != get(i + 3, i + 5) && calc(3, i + 3)) {
        dp[3][i] = 1;
        ans.insert(get(i, i + 2));
      }
      if (calc(2, i + 3)) {
        dp[3][i] = 1;
        ans.insert(get(i, i + 2));
      }
    }
  }
  cout << ans.size() << endl;
  for (auto i : ans) cout << i << endl;
  return 0;
}
