#include <bits/stdc++.h>
using namespace std;
vector<pair<char, int>> convert(const string &s) {
  vector<pair<char, int>> result;
  for (int i = 0; i < s.size(); i++) {
    int j = i;
    while (j + 1 < s.size() && s[j + 1] == s[j]) {
      j++;
    }
    result.emplace_back(s[i], j - i + 1);
    i = j;
  }
  reverse(result.begin(), result.end());
  return result;
}
void add(vector<pair<char, int>> &v, pair<char, int> el) {
  if (!v.empty() && v.back().first == el.first) {
    v.back().second += el.second;
  } else {
    v.push_back(el);
  }
}
void add(vector<pair<char, int>> &v, const vector<pair<char, int>> &els) {
  for (int i = (int)els.size() - 1; i >= 0; i--) {
    add(v, els[i]);
  }
}
template <typename T>
vector<T> extract(vector<T> &v, int cnt) {
  vector<T> result;
  while (cnt--) {
    result.push_back(v.back());
    v.pop_back();
  }
  return result;
}
int get_total_length(const vector<pair<char, int>> &v) {
  int result = 0;
  for (const auto &it : v) {
    result += it.second;
  }
  return result;
}
char S[200005], T[200005];
int main() {
  scanf("%s%s", S, T);
  string s = S, t = T;
  auto x = convert(s);
  auto y = convert(t);
  bool swapped = false;
  vector<pair<int, int>> answer;
  auto query = [&](int len_x, int len_y) {
    auto part_x = extract(x, len_x);
    auto part_y = extract(y, len_y);
    int length_x = get_total_length(part_x);
    int length_y = get_total_length(part_y);
    if (swapped) {
      swap(length_x, length_y);
    }
    answer.emplace_back(length_x, length_y);
    add(x, part_y);
    add(y, part_x);
  };
  while (x.size() != 1 || y.size() != 1) {
    int la = x.size();
    int lb = y.size();
    if (la < lb) {
      swap(la, lb);
      swap(x, y);
      swapped ^= true;
    }
    char a = x.back().first;
    char b = y.back().first;
    if (a != b) {
      if (lb <= 2) {
        if (la <= 3) {
          query(1, 1);
        } else {
          query(3, 1);
        }
      } else {
        query(1, 1);
      }
    } else {
      if (lb == 1) {
        if (la <= 3) {
          query(1, 0);
        } else {
          query(3, 0);
        }
      } else if (lb == 2) {
        query(2, 1);
      } else {
        query(3, 2);
      }
    }
  }
  printf("%d\n", answer.size());
  for (auto &op : answer) {
    printf("%d %d\n", op.first, op.second);
  }
}
