//
// main.c
// leimasin
//
// Created by aapo haavisto on 10/13/18.
// Copyright © 2018 Aapo Haavisto. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void change_to_star(char* place,int len){
for (int i=0; i<len; i++) {
if (place[i]=='\0') {
break;
}
place[i]='*';
}
}
int tasmaako(char* place, char*key){
int test=0;
int again=1;
while (key[test]!='\0' && again){
if (place[test]=='\0') {
return 0;
}
if (place[test]==key[test] || place[test]=='*') {
test++;
}
else{
again=0;
}
}
if(key[test]=='\0'){
return 1;
}
else{
return 0;
}
}
char* find_letter(char* place){
while (*place=='*') {
place++;
if (*place=='\0'){
return NULL;
}
}
return place;
}
int main(void) {
int failed=0;
char* merkkijono=malloc(1001*sizeof(char));
char* leimasin=malloc(1001*sizeof(char));
scanf("%s",merkkijono);
scanf("%s",leimasin);
int leimasinPituus=(int)strlen(leimasin);
int merkkijonoPituus=(int)strlen(merkkijono);
int siirrot=0;
int* list=malloc(sizeof(int));
// etsitaan kokonaiset
char* found=strstr(merkkijono, leimasin);
if(found==NULL){
printf("%i",-1);
free(merkkijono);
free(leimasin);
}
else{
while (found!=NULL) {
change_to_star(found, leimasinPituus);
siirrot++;
list=realloc(list, sizeof(int)*siirrot);
list[siirrot-1]=(int)(found-merkkijono+1);
found=strstr(merkkijono, leimasin);
}
/*printf("%i\n",siirrot);
printf("%s\n",merkkijono);
//printf("%i\n",list[0]);
for (int i=0; i<siirrot; i++) {
printf("%i, ",list[i]);
}
printf("%s","\n\n");*/
// alku, ei loppua
char* spot=strchr(merkkijono, leimasin[0]);
while (spot!=NULL) {
if (tasmaako(spot, leimasin)){
change_to_star(spot, leimasinPituus);
siirrot++;
list=realloc(list, sizeof(int)*siirrot);
list[siirrot-1]=(int)(spot-merkkijono+1);
spot=strchr(merkkijono, leimasin[0]);
}
else{
spot=strchr(spot+1, leimasin[0]);
}
}
/*printf("%i\n",siirrot);
printf("%s\n",merkkijono);
for (int i=0; i<siirrot; i++) {
printf("%i, ",list[i]);
}
printf("%s","\n\n");*/
//loppu,ei alku
char* spotti=strchr(merkkijono, leimasin[leimasinPituus-1]);
while (spotti!=NULL) {
if (tasmaako(spotti-leimasinPituus+1, leimasin)){
change_to_star(spotti-leimasinPituus+1, leimasinPituus);
siirrot++;
list=realloc(list, sizeof(int)*siirrot);
list[siirrot-1]=(int)((spotti-leimasinPituus+1)-merkkijono+1);
spotti=strchr(merkkijono, leimasin[leimasinPituus-1]);
}
else{
spotti=strchr(spotti+1, leimasin[leimasinPituus-1]);
}
}
/*printf("%i\n",siirrot);
printf("%s\n",merkkijono);
for (int i=0; i<siirrot; i++) {
printf("%i, ",list[i]);
}*/
//printf("%c",'\n');
//ei alku ei loppu
char* kohta=find_letter(merkkijono);
/*while (kohta!=NULL) {
int pituus=0;
char* kohta2=kohta;
while (*kohta2!='*' && *kohta2!='\0') {
pituus++;
kohta2++;
}
if (pituus>=leimasinPituus){
failed=1;
}
char* osa=malloc(sizeof(char)*pituus+1);
strncpy(osa, kohta,pituus);
char* leimakohta=strstr(leimasin, osa);
if (leimakohta==NULL){
failed=1;
break;
}
if (kohta-(leimakohta-leimasin)-merkkijono>=0 && kohta-(leimakohta-leimasin)+leimasinPituus-(merkkijono+merkkijonoPituus)<=0){
siirrot++;
list=realloc(list, sizeof(int)*siirrot);
list[siirrot-1]=(int)(kohta-merkkijono+1);
change_to_star(kohta-(leimakohta-leimasin), leimasinPituus);
spotti=strchr(merkkijono, leimasin[leimasinPituus-1]);
}
else{
failed=1;
break;
}
kohta=find_letter(merkkijono);
}*/
while (kohta!=NULL) {
char* kohta2=kohta;
int pituus=0;
while (*kohta2!='*' && *kohta2!='\0') {
pituus++;
kohta2++;
}
if (pituus>=leimasinPituus){
failed=1;
break;
}
int kerrat=0;
//printf("%i",-1);
if(kohta-leimasinPituus+pituus-merkkijono<0){
for(char* i=merkkijono; i<=kohta; i++){
if (tasmaako(i, leimasin)){
change_to_star(i, leimasinPituus);
siirrot++;
list=realloc(list, sizeof(int)*siirrot);
list[siirrot-1]=(int)(i-merkkijono+1);
break;
}
else{
kerrat++;
}
}
}
else{
for(char* i=kohta-(leimasinPituus-pituus); i<=kohta; i++){
if (tasmaako(i, leimasin)){
change_to_star(i, leimasinPituus);
siirrot++;
list=realloc(list, sizeof(int)*siirrot);
list[siirrot-1]=(int)(i-merkkijono+1);
break;
}
else{
kerrat++;
}
}
}
if (kerrat==leimasinPituus-pituus+1){
failed=1;
break;
}
kohta=find_letter(kohta+1);
}
if (failed){
printf("%i",-1);
}
else
{
printf("%i\n",siirrot);
//printf("%s\n",merkkijono);
for (int i=siirrot-1; i>=0; i--) {
printf("%i ",list[i]);
}
}
}
}