#include <bits/stdc++.h>
std::vector<std::pair<int, int> > S, T, ans;
bool rev = false;
void swapStr(int a, int b) {
  std::vector<std::pair<int, int> > t1, t2;
  int l1 = 0, l2 = 0;
  while (a--) {
    l1 += S.back().second;
    t1.push_back(S.back());
    S.pop_back();
  }
  while (b--) {
    l2 += T.back().second;
    t2.push_back(T.back());
    T.pop_back();
  }
  if (rev) std::swap(l1, l2);
  ans.push_back(std::make_pair(l1, l2));
  while (!t1.empty()) {
    if (T.empty() || t1.back().first != T.back().first)
      T.push_back(t1.back());
    else
      T.back().second += t1.back().second;
    t1.pop_back();
  }
  while (!t2.empty()) {
    if (S.empty() || t2.back().first != S.back().first)
      S.push_back(t2.back());
    else
      S.back().second += t2.back().second;
    t2.pop_back();
  }
}
int main() {
  std::ios_base::sync_with_stdio(false);
  std::cin.tie(0);
  std::cout.tie(0);
  std::string line;
  std::cin >> line;
  for (int i = 0; i < (int)line.size(); i++) {
    if (S.empty() || (line[i] != S.back().first + 'a')) {
      S.push_back(std::make_pair(line[i] - 'a', 1));
    } else
      S.back().second++;
  }
  std::cin >> line;
  for (int i = 0; i < (int)line.size(); i++) {
    if (T.empty() || (line[i] != T.back().first + 'a')) {
      T.push_back(std::make_pair(line[i] - 'a', 1));
    } else
      T.back().second++;
  }
  std::reverse(S.begin(), S.end());
  std::reverse(T.begin(), T.end());
  if ((int)S.size() > (int)T.size()) {
    rev = true;
    std::swap(S, T);
  }
  int x = S.back().first;
  for (auto it = S.begin(); it != S.end(); ++it) it->first ^= x;
  for (auto it = T.begin(); it != T.end(); ++it) it->first ^= x;
  if ((int)S.size() == 1) {
    if (T.back().first == 0)
      swapStr(0, ((int)T.size() / 4) * 2 + 1);
    else if ((int)T.size() > 1)
      swapStr(1, ((int)T.size() / 4) * 2 + 1);
  } else {
    if (T.back().first == 0) {
      if (((int)T.size() - (int)S.size()) % 4 == 3) swapStr(1, 2);
      swapStr(0, (((int)T.size() - (int)S.size()) / 4) * 2 + 1);
    } else {
      if (((int)T.size() - (int)S.size()) % 4 == 3)
        swapStr(1, (((int)T.size() - (int)S.size()) / 4) * 2 + 3);
      else
        swapStr(1, (((int)T.size() - (int)S.size()) / 4) * 2 + 1);
    }
  }
  while (S.size() > 1 || T.size() > 1) {
    swapStr(1, 1);
  }
  std::cout << (int)ans.size() << "\n";
  for (const std::pair<int, int>& a : ans) {
    std::cout << a.first << " " << a.second << "\n";
  }
  return 0;
}
