#include <bits/stdc++.h>
using namespace std;
deque<int> S, T;
vector<pair<int, int> > ans;
int main() {
  string s, t;
  cin >> s >> t;
  int i;
  for (i = 0; i < s.size(); i++) {
    if (S.empty() || ((i > 0) && (s[i] != s[i - 1]))) S.push_back(0);
    S.back()++;
  }
  for (i = 0; i < t.size(); i++) {
    if (T.empty() || ((i > 0) && (t[i] != t[i - 1]))) T.push_back(0);
    T.back()++;
  }
  int c = (s[0] != t[0]);
  while (1) {
    if ((S.size() == 1) && (T.size() == 1)) break;
    if (!c) {
      int f = 0;
      if (S.size() > T.size()) {
        if ((S.size() >= 3) && (T.size() >= 2)) {
          ans.push_back(make_pair(S[0] + S[1], T[0]));
          int x = S.front();
          S.pop_front();
          int y = S.front();
          S.pop_front();
          S.front() += T.front();
          T.pop_front();
          T.front() += y;
          T.push_front(x);
          f = 1;
        }
      } else {
        if ((T.size() >= 3) && (S.size() >= 2)) {
          ans.push_back(make_pair(S[0], T[0] + T[1]));
          int x = T.front();
          T.pop_front();
          int y = T.front();
          T.pop_front();
          T.front() += S.front();
          S.pop_front();
          S.front() += y;
          S.push_front(x);
          f = 1;
        }
      }
      if (!f) {
        if ((S.size() == 2) && (T.size() == 2)) {
          ans.push_back(make_pair(S[0], T[0] + T[1]));
          ans.push_back(make_pair(T[0], 0));
          break;
        } else {
          if (S.size() == 1) {
            if (T.size() == 2) {
              ans.push_back(make_pair(0, T[0]));
              break;
            } else {
              if ((T.size() % 4) == 3) {
                int x = S.front(), y = 0;
                S.pop_front();
                for (i = 0; i < T.size() / 2 + 1; i++)
                  S.push_back(T[i]), y += T[i];
                int ss = T.size();
                for (i = 0; i < ss / 2 + 1; i++) T.pop_front();
                ans.push_back(make_pair(x, y));
                T.front() += x;
              } else if ((T.size() % 4) == 0) {
                int x = S.front(), y = 0;
                S.pop_front();
                for (i = 0; i < T.size() / 2; i++) S.push_back(T[i]), y += T[i];
                int ss = T.size();
                for (i = 0; i < ss / 2; i++) T.pop_front();
                ans.push_back(make_pair(x, y));
                T.front() += x;
              } else if ((T.size() % 4) == 1) {
                int x = S.front(), y = 0;
                S.pop_front();
                for (i = 0; i < T.size() / 2; i++) S.push_back(T[i]), y += T[i];
                int ss = T.size();
                for (i = 0; i < ss / 2; i++) T.pop_front();
                ans.push_back(make_pair(x, y));
                T.front() += x;
              } else {
                int x = S.front(), y = 0;
                S.pop_front();
                for (i = 0; i < T.size() / 2; i++) S.push_back(T[i]), y += T[i];
                S.back() += x;
                int ss = T.size();
                for (i = 0; i < ss / 2; i++) T.pop_front();
                ans.push_back(make_pair(0, y));
                c = 1;
              }
            }
          } else if (T.size() == 1) {
            if (S.size() == 2) {
              ans.push_back(make_pair(S[0], 0));
              break;
            } else {
              if ((S.size() % 4) == 3) {
                int x = T.front(), y = 0;
                T.pop_front();
                for (i = 0; i < S.size() / 2 + 1; i++)
                  T.push_back(S[i]), y += S[i];
                int ss = S.size();
                for (i = 0; i < ss / 2 + 1; i++) S.pop_front();
                ans.push_back(make_pair(y, x));
                S.front() += x;
              } else if ((S.size() % 4) == 0) {
                int x = T.front(), y = 0;
                T.pop_front();
                for (i = 0; i < S.size() / 2; i++) T.push_back(S[i]), y += S[i];
                int ss = S.size();
                for (i = 0; i < ss / 2; i++) S.pop_front();
                ans.push_back(make_pair(y, x));
                S.front() += x;
              } else if ((S.size() % 4) == 1) {
                int x = T.front(), y = 0;
                T.pop_front();
                for (i = 0; i < S.size() / 2; i++) T.push_back(S[i]), y += S[i];
                int ss = S.size();
                for (i = 0; i < ss / 2; i++) S.pop_front();
                ans.push_back(make_pair(y, x));
                S.front() += x;
              } else {
                int x = T.front(), y = 0;
                T.pop_front();
                for (i = 0; i < S.size() / 2; i++) T.push_back(S[i]), y += S[i];
                T.back() += x;
                int ss = S.size();
                for (i = 0; i < ss / 2; i++) S.pop_front();
                ans.push_back(make_pair(y, 0));
                c = 1;
              }
            }
          }
        }
      }
    } else {
      int f = 0;
      if ((S.size() >= 2) && (T.size() >= 2)) {
        if (S.size() == 2) {
          if ((T.size() >= 5) && ((T.size() % 4) == 1)) {
            int x = S.front(), y = 0;
            S.pop_front();
            int xx = S.front();
            S.pop_front();
            for (i = 0; i < T.size() / 2 + 1; i++) S.push_back(T[i]), y += T[i];
            S.back() += xx;
            int ss = T.size();
            for (i = 0; i < ss / 2 + 1; i++) T.pop_front();
            ans.push_back(make_pair(x, y));
            T.front() += x;
            f = 1;
          } else if ((T.size() >= 5) && ((T.size() % 4) == 2)) {
            int x = S.front(), y = 0;
            S.pop_front();
            int xx = S.front();
            S.pop_front();
            for (i = 0; i < T.size() / 2; i++) S.push_back(T[i]), y += T[i];
            S.back() += xx;
            int ss = T.size();
            for (i = 0; i < ss / 2; i++) T.pop_front();
            ans.push_back(make_pair(x, y));
            T.front() += x;
            f = 1;
          }
        } else if (T.size() == 2) {
          if ((S.size() >= 5) && ((S.size() % 4) == 1)) {
            int x = T.front(), y = 0;
            T.pop_front();
            int xx = T.front();
            T.pop_front();
            for (i = 0; i < S.size() / 2 + 1; i++) T.push_back(S[i]), y += S[i];
            T.back() += xx;
            int ss = S.size();
            for (i = 0; i < ss / 2 + 1; i++) S.pop_front();
            ans.push_back(make_pair(y, x));
            S.front() += x;
            f = 1;
          } else if ((S.size() >= 5) && ((S.size() % 4) == 2)) {
            int x = T.front(), y = 0;
            T.pop_front();
            int xx = T.front();
            T.pop_front();
            for (i = 0; i < S.size() / 2; i++) T.push_back(S[i]), y += S[i];
            T.back() += xx;
            int ss = S.size();
            for (i = 0; i < ss / 2; i++) S.pop_front();
            ans.push_back(make_pair(y, x));
            S.front() += x;
            f = 1;
          }
        }
        if (!f) {
          ans.push_back(make_pair(S[0], T[0]));
          int x = S.front();
          S.pop_front();
          int y = T.front();
          T.pop_front();
          S.front() += y;
          T.front() += x;
          f = 1;
        }
      }
      if (!f) {
        if (S.size() == 1) {
          if (T.size() == 2) {
            ans.push_back(make_pair(S[0], T[0]));
            break;
          } else {
            if ((T.size() % 4) == 3) {
              int x = S.front(), y = 0;
              S.pop_front();
              for (i = 0; i < T.size() / 2 + 1; i++)
                S.push_back(T[i]), y += T[i];
              int ss = T.size();
              for (i = 0; i < ss / 2 + 1; i++) T.pop_front();
              ans.push_back(make_pair(x, y));
              T.push_front(x);
            } else if ((T.size() % 4) == 0) {
              int x = S.front(), y = 0;
              S.pop_front();
              for (i = 0; i < T.size() / 2; i++) S.push_back(T[i]), y += T[i];
              int ss = T.size();
              for (i = 0; i < ss / 2; i++) T.pop_front();
              ans.push_back(make_pair(x, y));
              T.push_front(x);
            } else if ((T.size() % 4) == 1) {
              int x = S.front(), y = 0;
              S.pop_front();
              for (i = 0; i < T.size() / 2 + 1; i++)
                S.push_back(T[i]), y += T[i];
              int ss = T.size();
              for (i = 0; i < ss / 2 + 1; i++) T.pop_front();
              ans.push_back(make_pair(x, y));
              T.front() += x;
            } else {
              int x = S.front(), y = 0;
              S.pop_front();
              for (i = 0; i < T.size() / 2; i++) S.push_back(T[i]), y += T[i];
              int ss = T.size();
              for (i = 0; i < ss / 2; i++) T.pop_front();
              ans.push_back(make_pair(x, y));
              T.front() += x;
            }
          }
        } else if (T.size() == 1) {
          if (S.size() == 2) {
            ans.push_back(make_pair(S[0], T[0]));
            break;
          } else {
            if ((S.size() % 4) == 3) {
              int x = T.front(), y = 0;
              T.pop_front();
              for (i = 0; i < S.size() / 2 + 1; i++)
                T.push_back(S[i]), y += S[i];
              int ss = S.size();
              for (i = 0; i < ss / 2 + 1; i++) S.pop_front();
              ans.push_back(make_pair(y, x));
              S.push_front(x);
            } else if ((S.size() % 4) == 0) {
              int x = T.front(), y = 0;
              T.pop_front();
              for (i = 0; i < S.size() / 2; i++) T.push_back(S[i]), y += S[i];
              int ss = S.size();
              for (i = 0; i < ss / 2; i++) S.pop_front();
              ans.push_back(make_pair(y, x));
              S.push_front(x);
            } else if ((S.size() % 4) == 1) {
              int x = T.front(), y = 0;
              T.pop_front();
              for (i = 0; i < S.size() / 2 + 1; i++)
                T.push_back(S[i]), y += S[i];
              int ss = S.size();
              for (i = 0; i < ss / 2 + 1; i++) S.pop_front();
              ans.push_back(make_pair(y, x));
              S.front() += x;
            } else {
              int x = T.front(), y = 0;
              T.pop_front();
              for (i = 0; i < S.size() / 2; i++) T.push_back(S[i]), y += S[i];
              int ss = S.size();
              for (i = 0; i < ss / 2; i++) S.pop_front();
              ans.push_back(make_pair(y, x));
              S.front() += x;
            }
          }
        }
      }
    }
  }
  printf("%d\n", (int)ans.size());
  for (i = 0; i < ans.size(); i++)
    printf("%d %d\n", ans[i].first, ans[i].second);
  return 0;
}
