#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
string s;//tavoitemerkkijono
string leima;//annettu leima
string tayte;//täyte
vector<int> iList;
int n;//tavoitemerkkijonon pituus
int m;//leiman pituus
bool ok = false;
cin>>s>>leima;
string s1 = s; //työstettävä kopio merkkijonosta
n = s.length();
m = leima.length();
for(int i=0; i < m; i++){
tayte += "?";
}
//SYÖTTEIDEN HYLKÄÄMINEN:
//jos leima pidempi kuin tavoite, ei onnistu
if(m > n){
cout<<-1;
}//jos tavoitteen 1. ja viimeinen merkki eivät täsmää, ei onnistu
else if(s[0] != leima[0] || s[n-1] != leima[m-1])
{
cout<<-1;
}//jos merkkijono ei sisällä leimaa, ei onnistu
else if(s.find(leima) == std::string::npos){
cout<<-1;//TÄMÄ
}//jos tavoitteesta löytyy merkkejä, joita ei ole leimassa, ei onnistu
else{
for(int i=0; i < n-1; i++){
if(leima.find(s[i]) == std::string::npos){
cout<<-1;
break;
}
}
ok = true;
}
//HYVÄKSYTTYJEN SYÖTTEIDEN KÄSITTELY
int x = 0;
if(ok){
//etsitään kaikki 1. kerroksen leimat
while(s.find(leima, x) != std::string::npos){
x = s.find(leima, x);
s1.replace(x, m, tayte);
iList.push_back(x);
x += 1;
}
//täydennetään toisen kerroksen leimat
for(int i=0; i < n; i++){
if(s1[i] != '?'){
if(leima.find(s[i]) != std::string::npos){
int b = leima.find(s[i]);
s1.replace(i-b, m, leima);
iList.push_back(i-b);
s1.replace(i-b, m, tayte);
}
}
}
//täydennetään päällimmäiset leimat
x = 0;
while(s.find(leima, x) != std::string::npos){
x = s.find(leima, x);
s1.replace(x, m, leima);
iList.push_back(x);
x += 1;
}
}
if(ok){
reverse(iList.begin(), iList.end());
cout<<iList.size()<<"\n";
for (int i = 0; i < iList.size(); i++) {
cout << iList[i]+1 << " ";
}
}
return 0;
}