#include <bits/stdc++.h>
using namespace std;
long long int max(long long int a, long long int b) {
  if (a > b)
    return a;
  else
    return b;
}
long long int min(long long int a, long long int b) {
  if (a < b)
    return a;
  else
    return b;
}
const int dx[4] = {-1, 1, 0, 0};
const int dy[4] = {0, 0, -1, 1};
int XX[] = {-1, -1, -1, 0, 0, 1, 1, 1};
int YY[] = {-1, 0, 1, -1, 1, -1, 0, 1};
string str;
long long int n;
set<string> s;
long long int dp[10004][5];
long long int func(long long int ind, long long int flag) {
  if (dp[ind][flag] != -1) return dp[ind][flag];
  long long int cnt = 0, flag2 = 0, flag3 = 0;
  if (ind - 2 >= 4) {
    if (flag == 1) {
      string str3, str4;
      if (str.substr(ind - 1, 2) == str.substr(ind + 1, 2)) {
        flag2 = 1;
      }
    }
    if (flag2 == 0) {
      string str2;
      str2.push_back(str[ind - 1]);
      str2.push_back(str[ind]);
      s.insert(str2);
      cnt += 1 + func(ind - 2, 1);
    }
  }
  if (ind - 3 >= 4) {
    if (flag == 2) {
      if (str.substr(ind - 2, 3) == str.substr(ind + 1, 3)) flag3 = 1;
    }
    if (flag3 == 0) {
      string str2;
      str2.push_back(str[ind - 2]);
      str2.push_back(str[ind - 1]);
      str2.push_back(str[ind]);
      s.insert(str2);
      cnt += 1 + func(ind - 3, 2);
    }
  }
  return dp[ind][flag] = cnt;
}
int main() {
  memset(dp, -1, sizeof(dp));
  ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
  long long int i, j;
  cin >> str;
  n = str.length();
  long long int ans = func(n - 1, 0);
  cout << s.size() << "\n";
  for (auto itr : s) cout << itr << "\n";
}
