#include <bits/stdc++.h>
using namespace std;
class Solution {
 public:
  vector<pair<int, int>> construct(string& s, string& t) {
    deque<pair<char, int>> qs;
    deque<pair<char, int>> qt;
    int n = s.length();
    int m = t.length();
    for (int i = 0; i < n; ++i) {
      char c = s[i];
      int cnt = 1;
      while (i + 1 < n && s[i + 1] == c) {
        ++i;
        ++cnt;
      }
      qs.emplace_back(c, cnt);
    }
    for (int i = 0; i < m; ++i) {
      char c = t[i];
      int cnt = 1;
      while (i + 1 < m && t[i + 1] == c) {
        ++i;
        ++cnt;
      }
      qt.emplace_back(c, cnt);
    }
    vector<pair<int, int>> res;
    res.reserve(n + m + 1000);
    while (qs.size() != 1 || qt.size() != 1) {
      assert(qs.size() > 0 && qt.size() > 0);
      if (qs.empty()) {
        int n = qt.size() / 2;
        if (n % 2 == 0 && n + 1 < qt.size()) {
          ++n;
        }
        int cnt = 0;
        while (n-- > 0) {
          cnt += qt.front().second;
          qs.push_back(qt.front());
          qt.pop_front();
        }
        res.emplace_back(0, cnt);
      } else if (qt.empty()) {
        int n = qs.size() / 2;
        if (n % 2 == 0 && n + 1 < qs.size()) {
          ++n;
        }
        int cnt = 0;
        while (n-- > 0) {
          cnt += qs.front().second;
          qt.push_back(qs.front());
          qs.pop_front();
        }
        res.emplace_back(cnt, 0);
      } else if (qs.size() == 1) {
        int n = qt.size() / 2;
        if (n % 2 == 0 && n + 1 < qt.size()) {
          ++n;
        }
        int cnt = 0;
        char c = qs.front().first;
        int cnt1 = qs.front().second;
        qs.pop_front();
        while (n-- > 0) {
          cnt += qt.front().second;
          if (n == 0) {
            if (c == qt.front().first) {
              qs.emplace_back(c, qt.front().second + cnt1);
              qt.pop_front();
              cnt1 = 0;
            } else {
              qs.push_back(qt.front());
              qt.pop_front();
              qt.front().second += cnt1;
            }
            break;
          } else {
            qs.push_back(qt.front());
          }
          qt.pop_front();
        }
        res.emplace_back(cnt1, cnt);
      } else if (qt.size() == 1) {
        int n = qs.size() / 2;
        if (n % 2 == 0 && n + 1 < qs.size()) {
          ++n;
        }
        int cnt = 0;
        char c = qt.front().first;
        int cnt1 = qt.front().second;
        qt.pop_front();
        while (n-- > 0) {
          cnt += qs.front().second;
          if (n == 0) {
            if (qs.front().first == c) {
              qt.emplace_back(c, qs.front().second + cnt1);
              qs.pop_front();
              cnt1 = 0;
            } else {
              qt.push_back(qs.front());
              qs.pop_front();
              qs.front().second += cnt1;
            }
            break;
          } else {
            qt.push_back(qs.front());
          }
          qs.pop_front();
        }
        res.emplace_back(cnt, cnt1);
      } else if (qs.front().first == qt.front().first) {
        if (qs.size() >= 2 && qt.size() >= 2) {
          if (qs.size() >= qt.size()) {
            auto p1 = qs.front();
            qs.pop_front();
            auto p2 = qs.front();
            qs.pop_front();
            auto p3 = qt.front();
            qt.pop_front();
            if (qs.empty()) {
              qs.push_front(p3);
            } else {
              qs.front().second += p3.second;
            }
            qt.front().second += p2.second;
            qt.push_front(p1);
            res.emplace_back(p1.second + p2.second, p3.second);
          } else {
            auto p1 = qs.front();
            qs.pop_front();
            auto p2 = qt.front();
            qt.pop_front();
            auto p3 = qt.front();
            qt.pop_front();
            qs.front().second += p3.second;
            qs.push_front(p2);
            qt.front().second += p1.second;
            res.emplace_back(p1.second, p2.second + p3.second);
          }
        } else {
          if (qs.size() >= qt.size()) {
            res.emplace_back(qs.front().second, 0);
            qt.front().second += qs.front().second;
            qs.pop_front();
          } else {
            res.emplace_back(0, qt.front().second);
            qs.front().second += qt.front().second;
            qt.pop_front();
          }
        }
      } else {
        if (qs.size() > 3 && qt.size() == 2) {
          auto p1 = qs.front();
          qs.pop_front();
          auto p2 = qs.front();
          qs.pop_front();
          auto p3 = qs.front();
          qs.pop_front();
          auto p4 = qt.front();
          qt.pop_front();
          res.emplace_back(p1.second + p2.second + p3.second, p4.second);
          qs.front().second += p4.second;
          qt.front().second += p3.second;
          qt.push_front(p2);
          qt.push_front(p1);
          continue;
        } else if (qs.size() == 2 && qt.size() > 3) {
          auto p1 = qs.front();
          qs.pop_front();
          auto p2 = qt.front();
          qt.pop_front();
          auto p3 = qt.front();
          qt.pop_front();
          auto p4 = qt.front();
          qt.pop_front();
          res.emplace_back(p1.second, p2.second + p3.second + p4.second);
          qs.front().second += p4.second;
          qs.push_front(p3);
          qs.push_front(p2);
          qt.front().second += p1.second;
          continue;
        }
        int cnt = qs.front().second;
        int cnt1 = qt.front().second;
        res.emplace_back(cnt, cnt1);
        qs.pop_front();
        qt.pop_front();
        qs.front().second += cnt1;
        qt.front().second += cnt;
      }
    }
    return res;
  }
};
int main(int argc, char** argv) {
  ios::sync_with_stdio(false);
  cin.tie(0);
  string s, t;
  cin >> s;
  cin >> t;
  Solution sol;
  auto res = sol.construct(s, t);
  cout << res.size() << endl;
  for (auto& p : res) {
    cout << p.first << " " << p.second << endl;
  }
  return 0;
}
