#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define fbo find_by_order
#define ook order_of_key
typedef long long ll;
typedef pair<int,int> ii;
typedef vector<int> vi;
typedef long double ld;
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds;
typedef set<int>::iterator sit;
typedef map<int,int>::iterator mit;
typedef vector<int>::iterator vit;
int power[6] = {1, 10, 100, 1000, 10000, 100000};
vector<ii> ans;
bool check(int x, string a)
{
int pos = int(a.length()) - 1;
while(x)
{
int dig = x%10;
if(a[pos]!='?'&&a[pos]!=char(dig+'0')) return false;
x/=10;
pos--;
}
return true;
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
string a, b;
cin>>a>>b;
int n = a.length();
for(int i = power[n-1]; i + 1 < power[n]; i++)
{
//cerr<<i<<' '<<check(i,a)<<' '<<check(i+1,b)<<'\n';
if(check(i, a)&&check(i+1, b))
{
ans.pb(mp(i, i+1));
}
}
cout<<ans.size()<<'\n';
for(int i = 0; i < ans.size(); i++)
{
cout << ans[i].fi << ' ' << ans[i].se << '\n';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CiAKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGZibyBmaW5kX2J5X29yZGVyCiNkZWZpbmUgb29rIG9yZGVyX29mX2tleQogCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8aW50LGludD4gaWk7CnR5cGVkZWYgdmVjdG9yPGludD4gdmk7CnR5cGVkZWYgbG9uZyBkb3VibGUgbGQ7IAp0eXBlZGVmIHRyZWU8aW50LCBudWxsX3R5cGUsIGxlc3M8aW50PiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT4gcGJkczsKdHlwZWRlZiBzZXQ8aW50Pjo6aXRlcmF0b3Igc2l0Owp0eXBlZGVmIG1hcDxpbnQsaW50Pjo6aXRlcmF0b3IgbWl0Owp0eXBlZGVmIHZlY3RvcjxpbnQ+OjppdGVyYXRvciB2aXQ7CgppbnQgcG93ZXJbNl0gPSB7MSwgMTAsIDEwMCwgMTAwMCwgMTAwMDAsIDEwMDAwMH07CnZlY3RvcjxpaT4gYW5zOwoKYm9vbCBjaGVjayhpbnQgeCwgc3RyaW5nIGEpCnsKCWludCBwb3MgPSBpbnQoYS5sZW5ndGgoKSkgLSAxOwoJd2hpbGUoeCkKCXsKCQlpbnQgZGlnID0geCUxMDsKCQlpZihhW3Bvc10hPSc/JyYmYVtwb3NdIT1jaGFyKGRpZysnMCcpKSByZXR1cm4gZmFsc2U7CgkJeC89MTA7CgkJcG9zLS07Cgl9CglyZXR1cm4gdHJ1ZTsKfQoKaW50IG1haW4oKQp7Cglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOwoJc3RyaW5nIGEsIGI7CgljaW4+PmE+PmI7CglpbnQgbiA9IGEubGVuZ3RoKCk7Cglmb3IoaW50IGkgPSBwb3dlcltuLTFdOyBpICsgMSA8IHBvd2VyW25dOyBpKyspCgl7CgkJLy9jZXJyPDxpPDwnICc8PGNoZWNrKGksYSk8PCcgJzw8Y2hlY2soaSsxLGIpPDwnXG4nOwoJCWlmKGNoZWNrKGksIGEpJiZjaGVjayhpKzEsIGIpKQoJCXsKCQkJYW5zLnBiKG1wKGksIGkrMSkpOwoJCX0KCX0KCWNvdXQ8PGFucy5zaXplKCk8PCdcbic7Cglmb3IoaW50IGkgPSAwOyBpIDwgYW5zLnNpemUoKTsgaSsrKQoJewoJCWNvdXQgPDwgYW5zW2ldLmZpIDw8ICcgJyA8PCBhbnNbaV0uc2UgPDwgJ1xuJzsKCX0KfQo=