#include <iostream>
#include <cmath> // pow() and log10()
#include <cstring> // memset()
#include <algorithm> // std::min_element() and std::max_element()
using namespace std;
// Problem: http://n...content-available-to-author-only...r.net/Problem/Details/5621
int arr[18]; // Store the binary sequence
int result[262144]; // (=2^18) Store the possible results of number z
int a, b, na, nb, _index = 0, n = 0;
/* a and b is the 2 numbers of input. na is the number of digit of a, nb is the number of
digit of b, _index is the index of array result[], n is the number of elements of result[]*/
void Analyze(int a[])
{
/* "_na" is used with pow() of base 10 and mod 10 to take the first digit of "a" from
the left to the right. So is "_nb".
For instance: a = 584 => na = 3 => _na = 2 => (584 / 10^2) % 10 = 5 is the first digit
of a from the left to the right.
*/
int _na = na - 1, _nb = nb - 1, temp = na + nb - 1;
for (int i = 0; i < (na + nb); ++i) {
if (a[i] == 0) {
int digit = static_cast<int>(::a/pow(10, _na--)) % 10;
result[_index] += digit * pow(10, temp--);
}
else {
int digit = static_cast<int>((::b)/pow(10, _nb--)) % 10;
result[_index] += digit * pow(10, temp--);
}
}
++_index; // update the index of result[] for the next assignments.
}
// Backtracking
void ListBinary(int i)
{
// na + nb is the length of the binary sequence.
if (i == (na + nb)) {
/* Count if the number of value 0 in the binary sequence is equal to the length of
a and the number of value 1 in the binary sequence is equal to the length of b. */
int zero = 0, one = 0;
for (int i = 0; i < (na + nb); ++i) {
if (arr[i] == 0)
++zero;
else ++one;
}
/* If the binary sequence is appropriate, then we will use it to create a number
and put into the result[] */
if (zero == na && one == nb) {
++n;
Analyze(arr);
}
}
else {
arr[i] = 0;
ListBinary(i + 1);
arr[i] = 1; // backtrack
ListBinary(i + 1);
}
}
int main()
{
memset(result, 0, 262144);
cin >> a >> b;
na = (int)log10(a) + 1;
nb = (int)log10(b) + 1;
ListBinary(0);
cout << *min_element(result, result + n) << endl << *max_element(result, result + n);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+IC8vIHBvdygpIGFuZCBsb2cxMCgpCiNpbmNsdWRlIDxjc3RyaW5nPiAvLyBtZW1zZXQoKQojaW5jbHVkZSA8YWxnb3JpdGhtPiAvLyBzdGQ6Om1pbl9lbGVtZW50KCkgYW5kIHN0ZDo6bWF4X2VsZW1lbnQoKQoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIFByb2JsZW06IGh0dHA6Ly9uLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5yLm5ldC9Qcm9ibGVtL0RldGFpbHMvNTYyMQoKaW50IGFyclsxOF07IC8vIFN0b3JlIHRoZSBiaW5hcnkgc2VxdWVuY2UKaW50IHJlc3VsdFsyNjIxNDRdOyAvLyAoPTJeMTgpIFN0b3JlIHRoZSBwb3NzaWJsZSByZXN1bHRzIG9mIG51bWJlciB6CmludCBhLCBiLCBuYSwgbmIsIF9pbmRleCA9IDAsIG4gPSAwOwovKiBhIGFuZCBiIGlzIHRoZSAyIG51bWJlcnMgb2YgaW5wdXQuIG5hIGlzIHRoZSBudW1iZXIgb2YgZGlnaXQgb2YgYSwgbmIgaXMgdGhlIG51bWJlciBvZgpkaWdpdCBvZiBiLCBfaW5kZXggaXMgdGhlIGluZGV4IG9mIGFycmF5IHJlc3VsdFtdLCBuIGlzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgb2YgcmVzdWx0W10qLwoKdm9pZCBBbmFseXplKGludCBhW10pCnsKICAgIC8qICJfbmEiIGlzIHVzZWQgd2l0aCBwb3coKSBvZiBiYXNlIDEwIGFuZCBtb2QgMTAgdG8gdGFrZSB0aGUgZmlyc3QgZGlnaXQgb2YgImEiIGZyb20KICAgIHRoZSBsZWZ0IHRvIHRoZSByaWdodC4gU28gaXMgIl9uYiIuCiAgICBGb3IgaW5zdGFuY2U6IGEgPSA1ODQgPT4gbmEgPSAzID0+IF9uYSA9IDIgPT4gKDU4NCAvIDEwXjIpICUgMTAgPSA1IGlzIHRoZSBmaXJzdCBkaWdpdAogICAgb2YgYSBmcm9tIHRoZSBsZWZ0IHRvIHRoZSByaWdodC4KICAgICovCiAgICBpbnQgX25hID0gbmEgLSAxLCBfbmIgPSBuYiAtIDEsIHRlbXAgPSBuYSArIG5iIC0gMTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKG5hICsgbmIpOyArK2kpIHsKICAgICAgICBpZiAoYVtpXSA9PSAwKSB7CiAgICAgICAgICAgIGludCBkaWdpdCA9IHN0YXRpY19jYXN0PGludD4oOjphL3BvdygxMCwgX25hLS0pKSAlIDEwOwogICAgICAgICAgICByZXN1bHRbX2luZGV4XSArPSBkaWdpdCAqIHBvdygxMCwgdGVtcC0tKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGludCBkaWdpdCA9IHN0YXRpY19jYXN0PGludD4oKDo6YikvcG93KDEwLCBfbmItLSkpICUgMTA7CiAgICAgICAgICAgIHJlc3VsdFtfaW5kZXhdICs9IGRpZ2l0ICogcG93KDEwLCB0ZW1wLS0pOwogICAgICAgIH0KICAgIH0KICAgICsrX2luZGV4OyAvLyB1cGRhdGUgdGhlIGluZGV4IG9mIHJlc3VsdFtdIGZvciB0aGUgbmV4dCBhc3NpZ25tZW50cy4KfQoKLy8gQmFja3RyYWNraW5nCnZvaWQgTGlzdEJpbmFyeShpbnQgaSkKewogICAgLy8gbmEgKyBuYiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBiaW5hcnkgc2VxdWVuY2UuCiAgICBpZiAoaSA9PSAobmEgKyBuYikpIHsKICAgICAgICAvKiBDb3VudCBpZiB0aGUgbnVtYmVyIG9mIHZhbHVlIDAgaW4gdGhlIGJpbmFyeSBzZXF1ZW5jZSBpcyBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mCiAgICAgICAgYSBhbmQgdGhlIG51bWJlciBvZiB2YWx1ZSAxIGluIHRoZSBiaW5hcnkgc2VxdWVuY2UgaXMgZXF1YWwgdG8gdGhlIGxlbmd0aCBvZiBiLiAqLwogICAgICAgIGludCB6ZXJvID0gMCwgb25lID0gMDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IChuYSArIG5iKTsgKytpKSB7CiAgICAgICAgICAgIGlmIChhcnJbaV0gPT0gMCkKICAgICAgICAgICAgICAgICsremVybzsKICAgICAgICAgICAgZWxzZSArK29uZTsKICAgICAgICB9CiAgICAgICAgLyogSWYgdGhlIGJpbmFyeSBzZXF1ZW5jZSBpcyBhcHByb3ByaWF0ZSwgdGhlbiB3ZSB3aWxsIHVzZSBpdCB0byBjcmVhdGUgYSBudW1iZXIKICAgICAgICBhbmQgcHV0IGludG8gdGhlIHJlc3VsdFtdICovCiAgICAgICAgaWYgKHplcm8gPT0gbmEgJiYgb25lID09IG5iKSB7CiAgICAgICAgICAgICsrbjsKICAgICAgICAgICAgQW5hbHl6ZShhcnIpOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgIGFycltpXSA9IDA7CiAgICAgICAgTGlzdEJpbmFyeShpICsgMSk7CiAgICAgICAgYXJyW2ldID0gMTsgLy8gYmFja3RyYWNrCiAgICAgICAgTGlzdEJpbmFyeShpICsgMSk7CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgbWVtc2V0KHJlc3VsdCwgMCwgMjYyMTQ0KTsKICAgIGNpbiA+PiBhID4+IGI7CiAgICBuYSA9IChpbnQpbG9nMTAoYSkgKyAxOwogICAgbmIgPSAoaW50KWxvZzEwKGIpICsgMTsKICAgIExpc3RCaW5hcnkoMCk7CiAgICBjb3V0IDw8ICptaW5fZWxlbWVudChyZXN1bHQsIHJlc3VsdCArIG4pIDw8IGVuZGwgPDwgKm1heF9lbGVtZW50KHJlc3VsdCwgcmVzdWx0ICsgbik7CiAgICByZXR1cm4gMDsKfQo=