#include <bits/stdc++.h>
using namespace std;
const long long MAX = 2e9, N = 5e3 + 10, MOD = 1e9 + 7;
string s, t;
long long n;
long long bad(string &s, char c) {
  long long an = s.back() != c;
  for (long long i = 1; i < s.size(); i++)
    if (s[i] != s[i - 1]) ++an;
  return an;
}
long long ind(long long d, string &s) {
  if (d == 0) return 0;
  long long c = 0;
  for (long long i = 0; i < s.size(); i++) {
    if (i + 1 == (long long)s.size()) return s.size();
    if (s[i] != s[i + 1]) ++c;
    if (c == d) return i + 1;
  }
  return 0;
}
void trm(string &a, string &b) {
  while (!a.empty() && a.back() == 'a') a.pop_back();
  while (!b.empty() && b.back() == 'b') b.pop_back();
}
void kil(string &a, string &b, vector<pair<long long, long long> > &an) {
  trm(a, b);
  while (!a.empty() || !b.empty()) {
    an.push_back(make_pair(a.size(), b.size()));
    swap(a, b);
    trm(a, b);
  }
}
vector<pair<long long, long long> > go(string a, string b) {
  vector<pair<long long, long long> > an;
  long long abad = bad(a, 'a'), bbad = bad(b, 'b');
  long long df = abs(abad - bbad);
  long long need = df >> 1;
  if (need == 0)
    kil(a, b, an);
  else {
    string *bg = &a, *sm = &b;
    if (abad < bbad) swap(bg, sm);
    long long bgn = ind(need, *bg);
    if (df & 1 && (*bg)[bgn - 1] != (*sm)[0]) ++need;
    string na, nb;
    long long lsm = 0, lbg = need;
    if (bbad > 0) ++lsm, ++lbg;
    if (sm == &a) {
      long long inda = ind(lsm, a), indb = ind(lbg, b);
      na = b.substr(0, indb) + a.substr(inda);
      nb = a.substr(0, inda) + b.substr(indb);
      an.push_back(make_pair(inda, indb));
    } else {
      long long inda = ind(lbg, a), indb = ind(lsm, b);
      na = b.substr(0, indb) + a.substr(inda);
      nb = a.substr(0, inda) + b.substr(indb);
      an.push_back(make_pair(inda, indb));
    }
    kil(na, nb, an);
  }
  return an;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cerr.tie(0);
  cin >> s >> t;
  n = (long long)(s.size());
  vector<pair<long long, long long> > res1 = go(s, t);
  vector<pair<long long, long long> > res2 = go(t, s);
  cout << min((long long)(res1.size()), (long long)(res2.size())) << "\n";
  cerr << "\n";
  if (res2.size() < res1.size())
    for (pair<long long, long long> i : res2)
      cout << i.second << " " << i.first << "\n";
  else
    for (pair<long long, long long> i : res1)
      cout << i.first << " " << i.second << "\n";
}
