#include <algorithm>
#include <cmath>
#include <complex>
#include <iostream>
#include <vector>
using namespace std;

int logLimit;
int limit;

vector <int> rev;

void calcRev () {
    rev = vector <int> (limit, 0);
    for (int i = 0; i < limit; i++)
        for (int k = 0; k < logLimit; k++)
            if (i & (1 << k))
                rev[i] ^= 1 << (logLimit - k - 1);
}

using Num = complex <double>;

double const Pi = acos (-1.0);

vector <Num> z;

void calcZ () {
    z = vector <Num> (limit);
    for (int i = 0; i < limit; i++)
        z[i] = Num (cos (i * 2 * Pi / limit),
                    sin (i * 2 * Pi / limit));
}

vector <Num> fft (const vector <Num> & a0, bool inv = false) {
    vector <Num> a = a0;
    for (int i = 0; i < limit; i++)
        if (i < rev[i])
            swap (a[i], a[rev[i]]);
    if (inv)
        reverse (z.begin () + 1, z.end ());
    for (int k = 0, span = 1, step = limit / 2; k < logLimit;
      k++, span *= 2, step /= 2) {
        for (int i = 0; i < limit; i += 2 * span)
            for (int j = 0; j < span; j++) {
                int u = i + j;
                int v = i + j + span;
                Num x = a[u] + a[v] * z[j * step];
                Num y = a[u] + a[v] * z[j * step + limit / 2];
                a[u] = x;
                a[v] = y;
            }
    }
    if (inv) {
        reverse (z.begin () + 1, z.end ());
        for (int i = 0; i < limit; i++)
            a[i] /= limit;
    }
    return a;
}

int main () {
    string s, t;
    cin >> s >> t;
    limit = int (s.size ());
    logLimit = int (log2 (limit) + 0.5);
    calcRev ();
    calcZ ();

    reverse (t.begin () + 1, t.end ());
    vector <Num> a (limit), b (limit);
    for (int i = 0; i < limit; i++) {
        a[i] = Num (s[i] - '0');
        b[i] = Num (t[i] - '0');
    }

    auto fa = fft (a);
    auto fb = fft (b);
    auto fc = vector <Num> (limit);
    for (int i = 0; i < limit; i++)
        fc[i] = fa[i] * fb[i];
    auto c = fft (fc, true);
    vector <int> res (limit);
    for (int i = 0; i < limit; i++)
        res[i] = int (c[i].real () + 0.5);

    for (int i = 0; i < limit; i++)
        cout << i << ": " << res[i] << endl;
    auto pos = max_element (res.begin (), res.end ());
    cout << "best = " << *pos << endl;
    cout << "pos = " << pos - res.begin () << endl;
    return 0;
}
