#include <iostream>
#include <string>
#include <vector>
#define MAXN 200005

using namespace std;

struct osobine
{
	int index;
	char value;	
};

struct pomocna
{
	int value;
	bool pre;
	bool posle;
	vector<int> indexi;
};

pomocna pom[15];
int rez[15];
osobine cursed[MAXN];

int main()
{
	string a,b;
	cin>>a>>b;
	
	int rezic;
	int pomic=0;
	int pom_a=-1;
	int counter_a=0,counter_b=0;
	
	bool pom_znj=true;
	for(int i=0;i<b.length();i++) if(b[i]!='a') pom_znj=false;
	
	if(b=="a")
	{
		for(int i=0;i<a.length();i++)
		{
			if(a[i]=='a') 
			{
				a[i]='*';
				rezic++;
			}
		}
		cout<<rezic<<endl<<a;
	}
	else if(b=="ab")
	{
		for(int i=0;i<a.length();i++)
		{
			if(a[i]=='a')
			{
				counter_a++;
				if(pom_a==-1) pom_a=i;
			}
			else if(a[i]=='b' && pom_a!=-1)
			{
				counter_b++;
			}
		}	
		if(counter_a>counter_b)
		{
			rezic=counter_b;
			for(int i=0;i<a.length();i++)
			{
				if(i>=pom_a && a[i]=='b') a[i]='*';
			}
		}	
		else
		{
			rezic=counter_a;
			for(int i=0;i<a.length();i++)
			{
				if(a[i]=='a') a[i]='*';
			}
		}
		cout<<rezic<<endl<<a;
	}
	else if(pom_znj)
	{
		for(int i=0;i<a.length();i++)
		{
			if(a[i]=='a' && pomic!=b.length()-1) 
			{
				pomic++;
			}
			else if(a[i]=='a') 
			{
				a[i]='*';
				rezic++;
			}
		}
		cout<<rezic<<endl<<a;
	}
	else
	{
	
		for(int i=0;i<b.length();i++) 
		{
			rez[i]=0;
			pom[i].value=0; 
			pom[i].pre=false;
			pom[i].posle=false;
			if(i==0) pom[i].pre=true;
			if(i==b.length()-1) pom[i].posle=true;
		}
		int cursed_counter=0;
		for(int i=0;i<a.length();i++)
		{
			for(int j=0;j<b.length();j++)
			{
				if(a[i]==b[j])
				{
					cursed[cursed_counter].index=i;
					cursed[cursed_counter].value=a[i];
					cursed_counter++;
					j=b.length();
				}
			}
		}
		for(int i=cursed_counter-1;i>=-1;i--)
		{
			for(int j=1;j<=b.length();j++)
			{	
				if(pom[b.length()-j].posle && pom[b.length()-j].pre) 
				{
					rez[b.length()-j]+=pom[b.length()-j].value;
					pom[b.length()-j].value=0;
				}
				if(cursed[i].value==b[b.length()-j] && pom[b.length()-j].posle)
				{
					pom[b.length()-j].value++;
					pom[b.length()-j+1].pre=true;
					pom[b.length()-j-1].posle=true;	
					pom[b.length()-j].indexi.push_back(cursed[i].index);
				}	
			}
		}
		int minimum=0;
		for(int i=1;i<b.length();i++)
			if(rez[minimum]>rez[i]) minimum=i;
			
		cout<<rez[minimum]<<endl;
		
		/*bool end_pom;
		for(int i=0;i<a.size();i++)
		{
			end_pom=false;
			for(int j=0;j<pom[minimum].indexi.size();j++)
			{
				if(i==pom[minimum].indexi[j]) 
				{
					cout<<"*";
					end_pom=true;
				}
			}
			if(!end_pom) cout<<a[i];
		}*/
	}
	return 0;
}