#include <bits/stdc++.h>
#define FILENAME "LCKSTR"
#define ll long long
#define el cout << '\n'
#define ii pair<ll, ll>
#define fi first
#define se second
#define pb push_back
#define YES cout << "YES", el
#define NO cout << "NO", el
#define print_type cout
#define print_el print_type << '\n'
#define DEBUG(...) [](auto && ... x) {int i = 0; ((print_type << (i++ ? " " : "") << x), ...), print_el;} (__VA_ARGS__)
#define bit(mask, i) (((mask) >> (i)) & 1)
#define BIT(n) (1ll << (n))
using namespace std;
const bool is_brute = 0;
const bool multi_test = 0;
const int maxn = 180;
const int maxm = 227;
const int maxk = 26;
const int INF = 1e9;
struct Parents
{
int x, y;
char c;
Parents() {};
Parents(int x, int y, char c) :
x(x), y(y), c(c) {};
};
struct Child
{
int k;
char x, y;
Child() {};
Child(int k, char x, char y) :
k(k), x(x), y(y) {};
friend ostream & operator << (ostream &cout, Child p)
{
cout << p.k << ' ' << p.x << ' ' << p.y;
return cout;
}
};
int n, m, q, dp[maxn + 10][maxn + 10], dpa[maxn + 10][maxn + 10], dpb[maxn + 10][maxn + 10];
Child ca[maxn + 10][maxn + 10][maxk + 10], cb[maxn + 10][maxn + 10][maxk + 10];
string a, b, c[maxm + 10];
Parents par[maxn + 10][maxn + 10];
vector<string> ansa, ansb;
void DP(int n, string a, int dp[maxn + 10][maxn + 10], Child p[maxn + 10][maxn + 10][maxk + 10])
{
for (int i = 1; i <= n; i++)
dp[i][i] |= BIT(a[i] - 'a');
for (int l = n; l >= 1; l--)
for (int r = l + 1; r <= n; r++)
{
for (int t = 1; t <= q; t++)
{
int x = c[t][0] - 'a';
int y = c[t][1] - 'a';
int z = c[t][2] - 'a';
if (bit(dp[l][r], x))
continue;
for (int k = l; k <= r - 1; k++)
if (bit(dp[l][k], y) && bit(dp[k + 1][r], z))
{
p[l][r][x] = Child(k, y + 'a', z + 'a');
dp[l][r] |= BIT(x);
break;
}
}
}
}
void TRACE(int l, int r, char e, Child ch[maxn + 10][maxn + 10][maxk + 10], int n, string &a, vector<string> &ans)
{
if (l == r)
return ;
Child t = ch[l][r][e - 'a'];
TRACE(l, t.k, t.x, ch, n, a, ans);
TRACE(t.k + 1, r, t.y, ch, n, a, ans);
auto getString = [=] (string a)
{
string ans = "";
for (int i = 1; i <= n; i++)
if (a[i] != '#')
ans += a[i];
return ans;
};
for (int i = l; i <= r; i++)
a[i] = '#';
a[l] = e;
ans.push_back(getString(a));
}
void solve()
{
cin >> a;
cin >> b;
cin >> q;
for (int i = 1; i <= q; i++)
cin >> c[i];
n = a.size();
m = b.size();
a = ' ' + a;
b = ' ' + b;
DP(n, a, dpa, ca);
DP(m, b, dpb, cb);
for (int i = 0; i <= n; i++)
for (int j = 0; j <= m; j++)
dp[i][j] = INF;
dp[0][0] = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
{
for (int x = i; x >= 1; x--)
{
if (dpa[x][i] == 0)
continue;
for (int y = j; y >= 1; y--)
{
if ((dpa[x][i] & dpb[y][j]) == 0)
continue;
if (dp[i][j] > dp[x - 1][y - 1] + i - x + j - y)
{
int c = __builtin_ctz(dpa[x][i] & dpb[y][j]) + 'a';
dp[i][j] = dp[x - 1][y - 1] + i - x + j - y;
par[i][j] = Parents(x - 1, y - 1, c);
}
}
}
}
cout << dp[n][m] << ' ';
int tn = n, tm = m;
string ans = "";
ansa.push_back(a);
ansb.push_back(b);
while (tn && tm)
{
Parents pr = par[tn][tm];
ans.push_back(pr.c);
TRACE(pr.x + 1, tn, pr.c, ca, n, a, ansa);
TRACE(pr.y + 1, tm, pr.c, cb, m, b, ansb);
tn = pr.x;
tm = pr.y;
}
ansa.pop_back();
ansb.pop_back();
reverse(ans.begin(), ans.end());
reverse(ansa.begin(), ansa.end());
reverse(ansb.begin(), ansb.end());
cout << ans, el;
cout << ansa.size();
for (string resa : ansa)
{
if (resa != ansa.back())
cout << ' ';
cout << resa;
}
el;
cout << ansb.size();
for (string resb : ansb)
{
if (resb != ansb.back())
cout << ' ';
cout << resb;
}
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen(FILENAME".INP", "r"))
{
freopen(FILENAME".INP", "r", stdin);
if (is_brute)
freopen(FILENAME"_TRAU.OUT", "w", stdout);
else
freopen(FILENAME".OUT", "w", stdout);
}
int ntest;
if (multi_test)
cin >> ntest;
else
ntest = 1;
for (int itest = 1; itest <= ntest; itest++)
{
// cout << itest, el;
solve();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIEZJTEVOQU1FICJMQ0tTVFIiCiNkZWZpbmUgbGwgbG9uZyBsb25nIAojZGVmaW5lIGVsIGNvdXQgPDwgJ1xuJwojZGVmaW5lIGlpIHBhaXI8bGwsIGxsPgojZGVmaW5lIGZpIGZpcnN0IAojZGVmaW5lIHNlIHNlY29uZCAKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBZRVMgY291dCA8PCAiWUVTIiwgZWwKI2RlZmluZSBOTyBjb3V0IDw8ICJOTyIsIGVsCiNkZWZpbmUgcHJpbnRfdHlwZSBjb3V0CiNkZWZpbmUgcHJpbnRfZWwgcHJpbnRfdHlwZSA8PCAnXG4nCiNkZWZpbmUgREVCVUcoLi4uKSBbXShhdXRvICYmIC4uLiB4KSB7aW50IGkgPSAwOyAoKHByaW50X3R5cGUgPDwgKGkrKyA/ICIgIiA6ICIiKSA8PCB4KSwgLi4uKSwgcHJpbnRfZWw7fSAoX19WQV9BUkdTX18pCiNkZWZpbmUgYml0KG1hc2ssIGkpICgoKG1hc2spID4+IChpKSkgJiAxKQojZGVmaW5lIEJJVChuKSAoMWxsIDw8IChuKSkKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBib29sIGlzX2JydXRlID0gMDsKY29uc3QgYm9vbCBtdWx0aV90ZXN0ID0gMDsKCmNvbnN0IGludCBtYXhuID0gMTgwOwpjb25zdCBpbnQgbWF4bSA9IDIyNzsKY29uc3QgaW50IG1heGsgPSAyNjsKY29uc3QgaW50IElORiA9IDFlOTsKCnN0cnVjdCBQYXJlbnRzCnsKICAgIGludCB4LCB5OwogICAgY2hhciBjOwoKICAgIFBhcmVudHMoKSB7fTsKICAgIFBhcmVudHMoaW50IHgsIGludCB5LCBjaGFyIGMpIDoKICAgICAgICB4KHgpLCB5KHkpLCBjKGMpIHt9Owp9OwpzdHJ1Y3QgQ2hpbGQKewogICAgaW50IGs7CiAgICBjaGFyIHgsIHk7CgogICAgQ2hpbGQoKSB7fTsKICAgIENoaWxkKGludCBrLCBjaGFyIHgsIGNoYXIgeSkgOgogICAgICAgIGsoayksIHgoeCksIHkoeSkge307CiAgICBmcmllbmQgb3N0cmVhbSAmIG9wZXJhdG9yIDw8IChvc3RyZWFtICZjb3V0LCBDaGlsZCBwKQogICAgewogICAgICAgIGNvdXQgPDwgcC5rIDw8ICcgJyA8PCBwLnggPDwgJyAnIDw8IHAueTsKICAgICAgICByZXR1cm4gY291dDsKICAgIH0KfTsKCmludCBuLCBtLCBxLCBkcFttYXhuICsgMTBdW21heG4gKyAxMF0sIGRwYVttYXhuICsgMTBdW21heG4gKyAxMF0sIGRwYlttYXhuICsgMTBdW21heG4gKyAxMF07CkNoaWxkIGNhW21heG4gKyAxMF1bbWF4biArIDEwXVttYXhrICsgMTBdLCBjYlttYXhuICsgMTBdW21heG4gKyAxMF1bbWF4ayArIDEwXTsgCnN0cmluZyBhLCBiLCBjW21heG0gKyAxMF07ClBhcmVudHMgcGFyW21heG4gKyAxMF1bbWF4biArIDEwXTsKdmVjdG9yPHN0cmluZz4gYW5zYSwgYW5zYjsKCnZvaWQgRFAoaW50IG4sIHN0cmluZyBhLCBpbnQgZHBbbWF4biArIDEwXVttYXhuICsgMTBdLCBDaGlsZCBwW21heG4gKyAxMF1bbWF4biArIDEwXVttYXhrICsgMTBdKQp7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICAgICAgZHBbaV1baV0gfD0gQklUKGFbaV0gLSAnYScpOwogICAgZm9yIChpbnQgbCA9IG47IGwgPj0gMTsgbC0tKQogICAgICAgIGZvciAoaW50IHIgPSBsICsgMTsgciA8PSBuOyByKyspCiAgICAgICAgewogICAgICAgICAgICBmb3IgKGludCB0ID0gMTsgdCA8PSBxOyB0KyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGludCB4ID0gY1t0XVswXSAtICdhJzsKICAgICAgICAgICAgICAgIGludCB5ID0gY1t0XVsxXSAtICdhJzsKICAgICAgICAgICAgICAgIGludCB6ID0gY1t0XVsyXSAtICdhJzsKICAgICAgICAgICAgICAgIGlmIChiaXQoZHBbbF1bcl0sIHgpKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IGw7IGsgPD0gciAtIDE7IGsrKykKICAgICAgICAgICAgICAgICAgICBpZiAoYml0KGRwW2xdW2tdLCB5KSAmJiBiaXQoZHBbayArIDFdW3JdLCB6KSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBbbF1bcl1beF0gPSBDaGlsZChrLCB5ICsgJ2EnLCB6ICsgJ2EnKTsKICAgICAgICAgICAgICAgICAgICAgICAgZHBbbF1bcl0gfD0gQklUKHgpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9Cn0Kdm9pZCBUUkFDRShpbnQgbCwgaW50IHIsIGNoYXIgZSwgQ2hpbGQgY2hbbWF4biArIDEwXVttYXhuICsgMTBdW21heGsgKyAxMF0sIGludCBuLCBzdHJpbmcgJmEsIHZlY3RvcjxzdHJpbmc+ICZhbnMpCnsKICAgIGlmIChsID09IHIpCiAgICAgICAgcmV0dXJuIDsKICAgIENoaWxkIHQgPSBjaFtsXVtyXVtlIC0gJ2EnXTsKICAgIFRSQUNFKGwsIHQuaywgdC54LCBjaCwgbiwgYSwgYW5zKTsKICAgIFRSQUNFKHQuayArIDEsIHIsIHQueSwgY2gsIG4sIGEsIGFucyk7CiAgICBhdXRvIGdldFN0cmluZyA9IFs9XSAoc3RyaW5nIGEpCiAgICB7CiAgICAgICAgc3RyaW5nIGFucyA9ICIiOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgICAgICAgICAgaWYgKGFbaV0gIT0gJyMnKQogICAgICAgICAgICAgICAgYW5zICs9IGFbaV07CiAgICAgICAgcmV0dXJuIGFuczsKICAgIH07CiAgICBmb3IgKGludCBpID0gbDsgaSA8PSByOyBpKyspCiAgICAgICAgYVtpXSA9ICcjJzsKICAgIGFbbF0gPSBlOwogICAgYW5zLnB1c2hfYmFjayhnZXRTdHJpbmcoYSkpOwp9Cgp2b2lkIHNvbHZlKCkKewogICAgY2luID4+IGE7CiAgICBjaW4gPj4gYjsKICAgIGNpbiA+PiBxOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQogICAgICAgIGNpbiA+PiBjW2ldOwogICAgbiA9IGEuc2l6ZSgpOwogICAgbSA9IGIuc2l6ZSgpOwogICAgYSA9ICcgJyArIGE7CiAgICBiID0gJyAnICsgYjsKICAgIERQKG4sIGEsIGRwYSwgY2EpOwogICAgRFAobSwgYiwgZHBiLCBjYik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8PSBuOyBpKyspCiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPD0gbTsgaisrKQogICAgICAgICAgICBkcFtpXVtqXSA9IElORjsKICAgIGRwWzBdWzBdID0gMDsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBtOyBqKyspCiAgICAgICAgewogICAgICAgICAgICBmb3IgKGludCB4ID0gaTsgeCA+PSAxOyB4LS0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChkcGFbeF1baV0gPT0gMCkKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSBqOyB5ID49IDE7IHktLSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoKGRwYVt4XVtpXSAmIGRwYlt5XVtqXSkgPT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRwW2ldW2pdID4gZHBbeCAtIDFdW3kgLSAxXSArIGkgLSB4ICsgaiAtIHkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgYyA9IF9fYnVpbHRpbl9jdHooZHBhW3hdW2ldICYgZHBiW3ldW2pdKSArICdhJzsKICAgICAgICAgICAgICAgICAgICAgICAgZHBbaV1bal0gPSBkcFt4IC0gMV1beSAtIDFdICsgaSAtIHggKyBqIC0geTsKICAgICAgICAgICAgICAgICAgICAgICAgcGFyW2ldW2pdID0gUGFyZW50cyh4IC0gMSwgeSAtIDEsIGMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIGNvdXQgPDwgZHBbbl1bbV0gPDwgJyAnOwogICAgaW50IHRuID0gbiwgdG0gPSBtOwogICAgc3RyaW5nIGFucyA9ICIiOwogICAgYW5zYS5wdXNoX2JhY2soYSk7CiAgICBhbnNiLnB1c2hfYmFjayhiKTsKICAgIHdoaWxlICh0biAmJiB0bSkKICAgIHsKICAgICAgICBQYXJlbnRzIHByID0gcGFyW3RuXVt0bV07CiAgICAgICAgYW5zLnB1c2hfYmFjayhwci5jKTsKICAgICAgICBUUkFDRShwci54ICsgMSwgdG4sIHByLmMsIGNhLCBuLCBhLCBhbnNhKTsKICAgICAgICBUUkFDRShwci55ICsgMSwgdG0sIHByLmMsIGNiLCBtLCBiLCBhbnNiKTsKICAgICAgICB0biA9IHByLng7CiAgICAgICAgdG0gPSBwci55OwogICAgfQogICAgYW5zYS5wb3BfYmFjaygpOwogICAgYW5zYi5wb3BfYmFjaygpOwogICAgcmV2ZXJzZShhbnMuYmVnaW4oKSwgYW5zLmVuZCgpKTsKICAgIHJldmVyc2UoYW5zYS5iZWdpbigpLCBhbnNhLmVuZCgpKTsKICAgIHJldmVyc2UoYW5zYi5iZWdpbigpLCBhbnNiLmVuZCgpKTsKICAgIGNvdXQgPDwgYW5zLCBlbDsKICAgIGNvdXQgPDwgYW5zYS5zaXplKCk7CiAgICBmb3IgKHN0cmluZyByZXNhIDogYW5zYSkKICAgIHsKICAgICAgICBpZiAocmVzYSAhPSBhbnNhLmJhY2soKSkKICAgICAgICAgICAgY291dCA8PCAnICc7CiAgICAgICAgY291dCA8PCByZXNhOwogICAgfQogICAgZWw7CiAgICBjb3V0IDw8IGFuc2Iuc2l6ZSgpOwogICAgZm9yIChzdHJpbmcgcmVzYiA6IGFuc2IpCiAgICB7CiAgICAgICAgaWYgKHJlc2IgIT0gYW5zYi5iYWNrKCkpCiAgICAgICAgICAgIGNvdXQgPDwgJyAnOwogICAgICAgIGNvdXQgPDwgcmVzYjsKICAgIH0KfQoKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGlmIChmb3BlbihGSUxFTkFNRSIuSU5QIiwgInIiKSkKICAgIHsKICAgICAgICBmcmVvcGVuKEZJTEVOQU1FIi5JTlAiLCAiciIsIHN0ZGluKTsKICAgICAgICBpZiAoaXNfYnJ1dGUpCiAgICAgICAgICAgIGZyZW9wZW4oRklMRU5BTUUiX1RSQVUuT1VUIiwgInciLCBzdGRvdXQpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgZnJlb3BlbihGSUxFTkFNRSIuT1VUIiwgInciLCBzdGRvdXQpOwogICAgfQoKICAgIGludCBudGVzdDsKICAgIGlmIChtdWx0aV90ZXN0KQogICAgICAgIGNpbiA+PiBudGVzdDsKICAgIGVsc2UKICAgICAgICBudGVzdCA9IDE7CiAgICBmb3IgKGludCBpdGVzdCA9IDE7IGl0ZXN0IDw9IG50ZXN0OyBpdGVzdCsrKQogICAgewogICAgICAgIC8vIGNvdXQgPDwgaXRlc3QsIGVsOwogICAgICAgIHNvbHZlKCk7CiAgICB9Cn0=