CSES - Datatähti 2019 alku - Results
Submission details
Task:Leimasin
Sender:patamaski
Submission time:2018-10-12 15:37:35 +0300
Language:C++
Status:READY
Result:29
Feedback
groupverdictscore
#1ACCEPTED29
#20
#30
Test results
testverdicttimegroup
#1ACCEPTED0.02 s1details
#2ACCEPTED0.01 s1details
#3ACCEPTED0.01 s1details
#4ACCEPTED0.02 s1details
#5ACCEPTED0.03 s1details
#6ACCEPTED0.01 s1details
#7ACCEPTED0.02 s1details
#8ACCEPTED0.02 s1details
#9ACCEPTED0.01 s1details
#10ACCEPTED0.01 s1details
#11ACCEPTED0.01 s1details
#12ACCEPTED0.02 s1details
#13ACCEPTED0.01 s1details
#14ACCEPTED0.01 s1details
#15ACCEPTED0.01 s2details
#16ACCEPTED0.01 s2details
#170.02 s2details
#18ACCEPTED0.02 s2details
#19ACCEPTED0.01 s2details
#20ACCEPTED0.02 s2details
#21ACCEPTED0.02 s2details
#22ACCEPTED0.02 s2details
#23ACCEPTED0.02 s2details
#24ACCEPTED0.02 s2details
#25ACCEPTED0.01 s2details
#26ACCEPTED0.01 s2details
#27ACCEPTED0.01 s2details
#28ACCEPTED0.01 s2details
#29ACCEPTED0.03 s3details
#300.02 s3details
#310.02 s3details
#320.02 s3details
#33ACCEPTED0.02 s3details
#34ACCEPTED0.03 s3details
#350.01 s3details
#360.02 s3details
#370.02 s3details
#38ACCEPTED0.03 s3details
#39ACCEPTED0.01 s3details
#40ACCEPTED0.03 s3details
#41ACCEPTED0.02 s3details
#42ACCEPTED0.03 s3details

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:99:6: warning: variable 'kohta' set but not used [-Wunused-but-set-variable]
  int kohta = 0;
      ^~~~~
input/code.cpp:184:6: warning: variable 'ekaleimasin' set but not used [-Wunused-but-set-variable]
  int ekaleimasin = 0, vikaleimasin = 0;
      ^~~~~~~~~~~
input/code.cpp:184:23: warning: variable 'vikaleimasin' set but not used [-Wunused-but-set-variable]
  int ekaleimasin = 0, vikaleimasin = 0;
                       ^~~~~~~~~~~~

Code

#include <bits/stdc++.h>
using namespace std;

//merge, kopioitu netistä
void merge(int arr[], int l, int m, int r) 
{ 
    int i, j, k; 
    int n1 = m - l + 1; 
    int n2 =  r - m; 
  
    /* create temp arrays */
    int L[n1], R[n2]; 
  
    /* Copy data to temp arrays L[] and R[] */
    for (i = 0; i < n1; i++) 
        L[i] = arr[l + i]; 
    for (j = 0; j < n2; j++) 
        R[j] = arr[m + 1+ j]; 
  
    /* Merge the temp arrays back into arr[l..r]*/
    i = 0; // Initial index of first subarray 
    j = 0; // Initial index of second subarray 
    k = l; // Initial index of merged subarray 
    while (i < n1 && j < n2) 
    { 
        if (L[i] <= R[j]) 
        { 
            arr[k] = L[i]; 
            i++; 
        } 
        else
        { 
            arr[k] = R[j]; 
            j++; 
        } 
        k++; 
    } 
  
    /* Copy the remaining elements of L[], if there 
       are any */
    while (i < n1) 
    { 
        arr[k] = L[i]; 
        i++; 
        k++; 
    } 
  
    /* Copy the remaining elements of R[], if there 
       are any */
    while (j < n2) 
    { 
        arr[k] = R[j]; 
        j++; 
        k++; 
    } 
} 
  
/* l is for left index and r is right index of the 
   sub-array of arr to be sorted */
void mergeSort(int arr[], int l, int r) 
{ 
    if (l < r) 
    { 
        // Same as (l+r)/2, but avoids overflow for 
        // large l and h 
        int m = l+(r-l)/2; 
  
        // Sort first and second halves 
        mergeSort(arr, l, m); 
        mergeSort(arr, m+1, r); 
  
        merge(arr, l, m, r); 
    } 
} 
  
/* UTILITY FUNCTIONS */
/* Function to print an array */
void printArray(int A[], int size) 
{ 
    int i; 
    for (i=0; i < size; i++) 
        printf("%d ", A[i]); 
    printf("\n"); 
} 
//...

// a=leimasimen kohta
// b=monesko leimasin
// c=leimasin
// d=jono
//int taakse(const int a, const int b, const string c, const string d){
//	return 0;
//}

int main(){

	bool mahdotonko = 0;
	int mahdoton = -1;
	int kohta = 0;

	string jonor,leimasinr;

	cin >> jonor >> leimasinr;

	int jononpit = jonor.length();
	int leimasinpit = leimasinr.length();

	char jono[jononpit];
	char leimasin[leimasinpit];

//	cout << jononpit << " " << leimasinpit << "\n";

	for (int i=0;i<jononpit;i++){
		jono[i] = jonor.at(i);
	}

	for (int i=0;i<leimasinpit;i++){
		leimasin[i] = leimasinr.at(i);
	}

//	cout << jono[0] << " " << leimasin[leimasinpit-1] << "\n";

	int alkuyhteiset = 0;
	bool testi = 0;

	for (int i=0;testi == 0;i++){
		if (jono[i] == leimasin[0]){
			alkuyhteiset++;
		}
		else {
			testi = 1;
		}
	}

//	cout << alkuyhteiset << " " << testi << "\n";

	int alkutoistoleimasin = 1;
	bool tarkistus = 0;

	for (int i=0;tarkistus == 0;i++){
		if (i < leimasinpit){
			if (leimasin[i] == leimasin[i+1]){
				alkutoistoleimasin++;
			}
			else{
				tarkistus = 1;
			}
		}
		else{
			tarkistus = 1;
		}
	}

//	cout << alkutoistoleimasin << " " << tarkistus << "\n";

	if (alkuyhteiset < alkutoistoleimasin){
		cout << mahdoton << "\n";
		mahdotonko = 1;
	}
	else if (jonor.find(leimasinr) == string::npos){
		cout << mahdoton << "\n";
		mahdotonko = 1;
// Löytyikö leimasinta jonosta ollenkaan?
	}

//	cout << jonor.find(leimasinr) << " \n";

	kohta = alkuyhteiset - alkutoistoleimasin;

//	if (mahdotonko==0 && jono[alkuyhteiset] != leimasin[alkutoistoleimasin]){
//		cout << mahdoton << "\n";
//		mahdotonko = 1;
//	}

//	if (mahdotonko==0 && kohta > 0){
//		for (int i=0;i<kohta;i++){
//			cout << i+1 << " ";
//		}
//		cout << "\n";
//	}

//	cout << kohta << "\n";

	int ekaleimasin = 0, vikaleimasin = 0;
	int leimasimet[jononpit+1];
	int leimasimia =0; //montako löytyy
	int havaittu = -1;

	for (int i=0;i<jononpit+1;i++){
		leimasimet[i]=-4;
	}

	if (mahdotonko==0){
		ekaleimasin = jonor.find(leimasinr);
		vikaleimasin = jonor.rfind(leimasinr);
		for (int i = 1;leimasimet[i-1]!=-1; i++)
		{
			leimasimet[i] = jonor.find(leimasinr,havaittu+1);
			havaittu = leimasimet[i];
		}
		for (int i = 0; i < jononpit+1; i++)
		{
			if (leimasimet[i]>-1){
				leimasimia++;
			}
		}
	}

//	for (int i=0;i<jononpit;i++){
//		cout << leimasimet[i] << " ";
//	}
//	cout << leimasimia << " \n";
//	cout << ekaleimasin << " " << vikaleimasin << "\n";

//	int eka = ekaleimasin;
//	int edennee = jononpit + 5;

//	int paikat[leimasimia][jononpit]; //leimattavat kohdat

	bool koe = 1;
//	int merkit;
//	bool kohdat[leimasinpit];
	int tarkatkohdat[leimasinpit];
	int kohtia = 0;
//	int mikakohta = -1;
	int ktalteen = -3;
	int poistettu = 0;

	int montakotehty = 0;
	int paikat2[jononpit];
	int matka[jononpit];
	int talletus[jononpit];

//	for (int i=0;i<leimasimia;i++){
//		for (int j = 0; j < jononpit; j++)
//		{
//			paikat[i][j]=-5;
//		}
//	}
	for (int i = 0; i < jononpit; ++i)
	{
		paikat2[i] = -5;
		matka[i] = 0;
		talletus[i] = 0;
	}
	for (int i = 1; i < leimasimia; ++i)
	{
		matka[i] = leimasimet[i+1]-leimasimet[i];
	}
	matka[0]=leimasimet[1]+leimasinpit;



// 1
//	for (int i = 1; i < leimasimia+1; i++)
//	{
//		eka = leimasimet[i];
//		edennee = leimasimet[i];
// Etsii leimasimien alkuosia kohta kerrallaan
//		for (int j = leimasimet[i]; j > 0; j--)
//		{
// Etsii leimasimesta kaikki merkit jotka ovat samat kohdan edellisen merkin kanssa
//			for (int k = 0; k < leimasinpit; k++)
//			{
//				if (jono[leimasimet[i]-1] == leimasin[k]){
//					kohdat[k] = 0;
//					kohtia++;
//				}
//				else {
//					kohdat[k] = 1;
//				}
//			}
// Testaa sopiiko jokainen merkki jonoon jossakin kohdassa
//			for (int k = 0; k < leimasinpit; k++)
//			{
//				if (kohdat[k]==0){
//					for (int l = 0; l < k; l++)
//					{
// Jos jokin merkki erisuuri, siirrytään seuraavaan leimasimen kohtaan
//						if (leimasin[l] != jono[leimasimet[i]-l-1]){
//							koe = 0;
//							break;
//						}
//					}
// Jos koe == 1, niin kaikki merkit käy, jolloin ei tarvitse käydä muita leimasimen kohtia
//					if (koe == 1){
//						mikakohta = k;
//						break;
//					}
//				}
//			}
// Jos mikakohta ei muuttunut, ei löydy tapaa laittaa leimasinta
//			if (mikakohta < 0){
// Jos eka - kohta > 0, jää jokin kirjain leimaamatta
//				if (eka - kohta > 0){
//					cout << mahdoton << "\n";
//					mahdotonko = 1;
//				}
//			}
// paikat[monesko leimasin][???]
//			else {
//				paikat[i][mikakohta];
//			}
//			merkit = leimasinr.find()
//		}
//	}

// Etsi jonosta löytyvän leimasimen edestä leimasimen alkuosia
//	for (int i=0; (edennee !=0) && (eka - kohta > 0); i++ ){
// Testaa sopiiko jokainen merkki jonoon
//		for (int j=0; j < leimasinr.find(jono[eka-1]); j++){
//			if(jono[eka-1-j] != leimasin[leimasinr.find(jono[eka-1])-j]){
//				koe = 0;
//			}
//		}
// Jos sopii
//		if (koe == 1){
//			eka -= (leimasinr.find(jono[eka-1]) + 1);
//			paikat[i] = eka;
//		}
//		edennee--;
//	}

// 1. Etsi [seuraava] leimasin
	for (int i = 1; i < leimasimia+1; i++)
	{
		poistettu = 0;
		koe = 1;
// 2. Etsi [seuraava] pätkä jonosta
		for (int j = 0; j < jononpit; j++)
		{
// 3. Etsi [seuraava] oikea kirjain leimasimesta
			koe = 1;
			kohtia = 0;
// 3.1. Etsi kaikki paikat, joissa oikea kirjain leimasimessa
			for (int k = 0; k < leimasinpit; k++)
			{
				if (jono[leimasimet[i]-1-poistettu] == leimasin[k]){
//					kohdat[k] = 0;
					kohtia++;
					tarkatkohdat[kohtia] = k;
//					cout << i << " " << k << " " << kohtia << " \n";
//					cout << tarkatkohdat[1] << "\n";
//					for(int z=0;z<kohtia;z++){cout<<tarkatkohdat[z+1]<<" t "<<i<<" "<<j<<"\n";}
				}
//				else {
//					kohdat[k] = 1;
//				}
			}
// 3.2. Varsinainen etsiminen
			if (kohtia != 0){
				for (int k = 1; k < kohtia+1; k++)
				{
// 4. Etsi leimasimen kirjainta edeltävä pätkä jonon oikeasta kohdasta
//					cout << tarkatkohdat[k] << " " << leimasimet[i] << " " << i << " " << j << " " << k << "\n";
					for (int l = 1; l < min(tarkatkohdat[k]+1,leimasimet[i])+1; l++)
					{
						if (jono[leimasimet[i]-l-poistettu] != leimasin[tarkatkohdat[k]-l+1])
						{
							koe = 0;
							break;
						}
					}
					if (koe == 1){
						ktalteen = k;
						break;
					}
				}
			}
			else break;
			if (koe == 1){
//				paikat[i-1][j] = leimasimet[i]-tarkatkohdat[ktalteen]-poistettu;

				if (j < matka[i-1]-leimasinpit+1){
					paikat2[montakotehty] = leimasimet[i]-tarkatkohdat[ktalteen]-poistettu;
					montakotehty++;
					talletus[i-1]++;
				}

				poistettu += tarkatkohdat[ktalteen] + 1;
			}
//			if (koe == 1)
//			{
//				if (j < matka[i-1]-leimasinpit+1)
//				{
//					paikat2[montakotehty] = leimasimet[i]-tarkatkohdat[ktalteen]-poistettu;
//					montakotehty++;
//				}
//			}
			else break;
		}
	}



	bool koeb = 1;
//	bool kohdatb[leimasinpit];
	int tarkatkohdatb[leimasinpit];
	int kohtiab = 0;
	int ktalteenb = -3;
	int poistettub = 0;
	int montakotehtyb = 0;
	int paikat2b[jononpit];
	int matkab[jononpit];
	int talletusb[jononpit];

	for (int i = 0; i < jononpit; ++i)
	{
		paikat2b[i] = -5;
		matkab[i] = 0;
		talletusb[i] = 0;
	}
	for (int i = leimasimia-2; i > -1; i--)
	{
		matkab[i] = leimasimet[i+2]-leimasimet[i+1];
	}
	matkab[leimasimia-1]=jononpit-leimasimet[leimasimia];

	for (int i = leimasimia; i > 0; i--){
		poistettub = 0;
		koeb = 1;
		for (int j = 0; j < jononpit; j++){
			koeb = 1;
			kohtiab = 0;
			for (int k = 0; k < leimasinpit; k++)
			{
				if (jono[leimasimet[i]+leimasinpit+poistettub] == leimasin[leimasinpit-k-1]){
//					kohdatb[k] = 0;
					kohtiab++;
					tarkatkohdatb[kohtiab] = k;}
//				else {
//					kohdatb[k] = 1;}
			}
			if (kohtiab != 0){
				for (int k = 1; k < kohtiab+1; k++)
				{
//					cout << tarkatkohdatb[k] << " " << leimasimet[i] << " " << i << " " << j << " " << k << "\n";
					for (int l = 1; l < min(tarkatkohdatb[k]+1,jononpit-leimasimet[i])+1; l++)
					{
						if (jono[leimasimet[i]+l+poistettub+leimasinpit-1] != leimasin[leimasinpit-tarkatkohdatb[k]+l-2])
						{
							koeb = 0;
							break;}}
					if (koeb == 1){
						ktalteenb = k;
						break;}}}
			else break;
			if (koeb == 1){
				if (j < matkab[i-1]-leimasinpit){
					paikat2b[montakotehtyb] = leimasimet[i]+tarkatkohdatb[ktalteenb]+poistettub+2;
					montakotehtyb++;
					talletusb[i-1]++;}
				poistettub += tarkatkohdatb[ktalteenb] + 1;
			}else break;}}



//	for(int i=0;i<leimasimia;i++){for(int j=0;j<jononpit;j++){cout<<paikat[i][j]<<" ";}cout<<"\n";}

//	if (mahdotonko==0 && edennee == 0){
//		cout << mahdoton << "\n";
//		mahdotonko = 1;
//	}


//	for (int i = 0; i < jononpit; i++)
//	{
//		merge(paikat,paikat+jononpit-1,paikat);
//	}

//	cout << ktalteen << "\n";
//	cout << leimasimet[1] << " " << leimasimet[2] << "\n";
//	for(int i=0;i<leimasinpit;i++){cout<<leimasin[i];}
//	for(int i=0;i<jononpit;i++){cout<<jono[i];}

//	for(int i=0;i<jononpit;i++){cout<<matka[i]<<" ";}cout<<"\n";
//	for(int i=0;i<jononpit;i++){cout<<paikat2[i]<<" ";}cout<<"\n";
//	for(int i=0;i<jononpit;i++){cout<<talletus[i]<<" ";}cout<<"\n";

//	cout<<"\n";

//	for(int i=0;i<jononpit;i++){cout<<matkab[i]<<" ";}cout<<"\n";
//	for(int i=0;i<jononpit;i++){cout<<paikat2b[i]<<" ";}cout<<"\n";
//	for(int i=0;i<jononpit;i++){cout<<talletusb[i]<<" ";}
//	cout << edennee << " " << paikat[0] << " " << paikat[1] << " " << paikat[2] << " " << paikat[jononpit+5-edennee] << "\n";

//	cout << "\n";

	int lopputulos = 0;
	int lopputulosb = 0;
	for (int i = 0; i < leimasimia; ++i)
	{
		lopputulos += talletus[i];
	}
	for (int i = 0; i < leimasimia; ++i)
	{
		lopputulosb += talletusb[i];
	}

//	cout << lopputulos << " " << lopputulosb << " \n";

	int taulukko[lopputulos+lopputulosb+leimasimia];
	for (int i = 0; i < lopputulos; i++)
	{
		taulukko[i] = paikat2[i];
//		cout << taulukko[i] << " \n";
	}
	for (int i = 0; i < lopputulosb; i++)
	{
		taulukko[i+lopputulos]= paikat2b[i];
//		cout << taulukko[i+lopputulos] << " \n";
	}
	for (int i = 0; i < leimasimia; ++i)
	{
		taulukko[i+lopputulos+lopputulosb] = leimasimet[i+1] + 1;
	}

	mergeSort(taulukko, 0, lopputulos + lopputulosb + leimasimia - 1);
//	printArray(taulukko, lopputulos + lopputulosb + leimasimia);

//	for (int i = 0; i < lopputulos + lopputulosb + leimasimia; ++i)
//	{
//		cout << taulukko[i] << " ";
//	}

	int erotus = 0;
	int erotukset[lopputulos + lopputulosb + leimasimia];
	int erotuspaikat[lopputulos + lopputulosb + leimasimia];
	int leimattavia[lopputulos + lopputulosb + leimasimia];
	int lukuja = 0;
	for (int i = 0; i < lopputulos + lopputulosb + leimasimia; i++)
	{
		erotukset[i] = -6;
		erotuspaikat[i] = -7;
		leimattavia[i] = -8;
	}

	for (int i = 0; i < lopputulos + lopputulosb + leimasimia - 1; i++)
	{
		if (taulukko[i+1]-taulukko[i] > erotus - 1){
			erotus = taulukko[i+1] - taulukko[i];
		}
		if (taulukko[i+1] - taulukko[i] > leimasinpit)
		{
			erotukset[i] = taulukko[i+1] - taulukko[i];
			erotuspaikat[i] = taulukko[i] + leimasinpit;
			lukuja++;
		}
	}
//	printArray(erotukset, lopputulos + lopputulosb + leimasimia);
//	printArray(erotuspaikat, lopputulos + lopputulosb + leimasimia);

	bool kokeilu = 1;
	int tarkistettava_kohta = 0;
	int kokonaisuudessaan = 0;

	for (int i = 0; i < lopputulos + lopputulosb + leimasimia - 1; i++)
	{
		if (erotukset[i] > -1)
		{
			for (int k = 0; k < 2 * leimasinpit - erotukset[i]; k++){
			kokeilu = 1;
			for (int j = 0; j < erotukset[i]-leimasinpit; j++)
			{
				if (jono[erotuspaikat[i]-1+j] != leimasin[j+k])
				{
					kokeilu = 0;
					break;
				}
			}
			if (kokeilu == 1)
			{
				tarkistettava_kohta = k;
				break;
			}
			}
		}
		else{
			continue;
		}
		if (kokeilu == 1)
		{
			leimattavia[i] = erotuspaikat[i] - tarkistettava_kohta;
			kokonaisuudessaan++;
		}
		tarkistettava_kohta = 0;
	}

	int leimattavia2[kokonaisuudessaan];
	int jolaitettu = 0;
	for (int i = 0; i < kokonaisuudessaan; ++i)
	{
		leimattavia2[i] = 0;
	}
	for (int i = 0; i < lopputulos + lopputulosb + leimasimia; ++i)
	{
		if (leimattavia[i] > -1)
		{
			leimattavia2[jolaitettu] = leimattavia[i];
			jolaitettu++;
		}
	}


//	printArray(leimattavia2, kokonaisuudessaan);

//	cout << erotus << " \n";

//	cout << lukuja << " " << jolaitettu << " \n";

if (mahdotonko == 0){
//	if (erotus > leimasinpit)
//	{
//		cout << -1 << " \n";
//		mahdotonko = 1;
//	}
	if (taulukko[0] != 1)
	{
		cout << -1 << " \n";
		mahdotonko = 1;
	}
	else if (taulukko[lopputulos+lopputulosb+leimasimia-1] != jononpit-leimasinpit+1)
	{
		cout << -1 << " \n";
		mahdotonko = 1;
	}
	else if (lukuja > jolaitettu)
	{
		cout << -1 << " \n";
		mahdotonko = 1;
	}
}
if (mahdotonko == 0)
{
	int summa2 = 0;
	int summab2 = 0;
	int siirrot = 0;
	for (int j = 0; j < leimasimia; j++)
	{
		for (int i = 0; i < talletus[j]; ++i)
		{
			siirrot++;
		}
		summa2 += talletus[j];
	}
	for (int j = leimasimia-1; j > -1; j--)
	{
		for (int i = 0; i < talletusb[j]; ++i)
		{
			siirrot++;
		}
		summab2 += talletusb[j];
	}
	for (int i = 1; i < leimasimia + 1; i++)
	{
		siirrot++;
	}
	cout << siirrot+jolaitettu << "\n";

	for (int i = 0; i < jolaitettu; i++)
	{
		cout << leimattavia2[i] << " ";
	}

	int summa = 0;
	for (int j = 0; j < leimasimia; j++)
	{
		for (int i = 0; i < talletus[j]; ++i)
		{
			cout << paikat2[talletus[j]-i-1+summa] << " ";
		}
		summa += talletus[j];
	}

//	cout << "\n";

	int summab = 0;
	for (int j = leimasimia-1; j > -1; j--)
	{
		for (int i = 0; i < talletusb[j]; ++i)
		{
			cout << paikat2b[talletusb[j]-i-1+summab] << " ";
		}
		summab += talletusb[j];
	}

	for (int i = 1; i < leimasimia + 1; i++)
	{
		cout << leimasimet[i] + 1 << " ";
	}
	cout << "\n";
}

/*	for (int i = 0; i < jononpit; i++)
	{
		mergesort()
	}
*/


	return 0;
}

Test details

Test 1

Group: 1

Verdict: ACCEPTED

input
BBBBBBBBBB
B

correct output
10
10 9 8 7 6 5 4 3 2 1 

user output
19
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 ...

Test 2

Group: 1

Verdict: ACCEPTED

input
AABBABABAB
AB

correct output
6
1 9 7 5 3 2 

user output
8
1 5 7 3 2 5 7 9 

Test 3

Group: 1

Verdict: ACCEPTED

input
AABAAABAAA
AABAA

correct output
4
6 5 2 1 

user output
3
6 1 5 

Test 4

Group: 1

Verdict: ACCEPTED

input
BAAAAAABBB
BAAAAAABB

correct output
2
2 1 

user output
2
2 1 

Test 5

Group: 1

Verdict: ACCEPTED

input
AAABBABBAA
AAABBABBAA

correct output
1

user output
1

Test 6

Group: 1

Verdict: ACCEPTED

input
GGGGGGGGGG
G

correct output
10
10 9 8 7 6 5 4 3 2 1 

user output
19
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 ...

Test 7

Group: 1

Verdict: ACCEPTED

input
QUUQUUQUQU
QU

correct output
6
9 7 5 4 2 1 

user output
7
7 5 2 1 4 7 9 

Test 8

Group: 1

Verdict: ACCEPTED

input
DWXDWDWXHJ
DWXHJ

correct output
3
1 4 6 

user output
3
1 4 6 

Test 9

Group: 1

Verdict: ACCEPTED

input
FSOCRDGQBB
FSOCRDGQB

correct output
2
2 1 

user output
2
2 1 

Test 10

Group: 1

Verdict: ACCEPTED

input
OETMIMPUPD
OETMIMPUPD

correct output
1

user output
1

Test 11

Group: 1

Verdict: ACCEPTED

input
DOWEUOWUEU
DOWEU

correct output
-1

user output
-1 

Test 12

Group: 1

Verdict: ACCEPTED

input
JQZYVSIWTE
JQZVYSIWTE

correct output
-1

user output
-1

Test 13

Group: 1

Verdict: ACCEPTED

input
ABABABABA
ABA

correct output
4
7 5 3 1 

user output
4
1 3 5 7 

Test 14

Group: 1

Verdict: ACCEPTED

input
AAAAAAAAAA
AAAAAAAAAB

correct output
-1

user output
-1

Test 15

Group: 2

Verdict: ACCEPTED

input
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB...

correct output
100
100 99 98 97 96 95 94 93 92 91...

user output
199
1 2 3 4 5 6 7 8 9 10 11 12 13 ...
Truncated

Test 16

Group: 2

Verdict: ACCEPTED

input
BABABAAAAAAAAAAAAAAAAAABABAAAA...

correct output
36
87 43 24 1 91 79 69 68 67 66 6...

user output
37
24 1 43 45 89 69 68 67 66 65 6...
Truncated

Test 17

Group: 2

Verdict:

input
ABABAAAAABABBBBAAAABBBBAABBBBB...

correct output
22
51 50 43 41 31 28 26 24 21 20 ...

user output
-1 

Test 18

Group: 2

Verdict: ACCEPTED

input
AAABABAAAABBBBBABABBAABBABABBA...

correct output
2
1 2 

user output
2
1 2 

Test 19

Group: 2

Verdict: ACCEPTED

input
AABABBBBBBAABBABABBBBBBAABBAAA...

correct output
1

user output
1

Test 20

Group: 2

Verdict: ACCEPTED

input
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSS...

correct output
100
100 99 98 97 96 95 94 93 92 91...

user output
199
1 2 3 4 5 6 7 8 9 10 11 12 13 ...
Truncated

Test 21

Group: 2

Verdict: ACCEPTED

input
NNNININIMNIMKLMXCNIMKLMXCDEIMK...

correct output
18
1 2 3 74 5 79 58 7 84 64 37 10...

user output
19
58 74 1 2 3 5 7 10 37 39 64 79...

Test 22

Group: 2

Verdict: ACCEPTED

input
VYQFNHMVTKOEYCXWINLKLHVFMEPQEU...

correct output
3
51 2 1 

user output
3
50 1 51 

Test 23

Group: 2

Verdict: ACCEPTED

input
IISNROLHLOJIWPTVFHFLUQRIROVLYP...

correct output
2
1 2 

user output
2
1 2 

Test 24

Group: 2

Verdict: ACCEPTED

input
WPMEMERJXXADLKONUZPUUFTPSXDHIV...

correct output
1

user output
1

Test 25

Group: 2

Verdict: ACCEPTED

input
LNSBGZAWFJZAWFJWFJLNSBLNSBGZAL...

correct output
-1

user output
-1 

Test 26

Group: 2

Verdict: ACCEPTED

input
IPIPYFUMRIPYFUMRLPIIIPYFIPYFUM...

correct output
-1

user output
-1

Test 27

Group: 2

Verdict: ACCEPTED

input
ABABABABABABABABABABABABABABAB...

correct output
49
97 95 93 91 89 87 85 83 81 79 ...

user output
49
1 3 5 7 9 11 13 15 17 19 21 23...
Truncated

Test 28

Group: 2

Verdict: ACCEPTED

input
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...

correct output
-1

user output
-1

Test 29

Group: 3

Verdict: ACCEPTED

input
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB...

correct output
1000
1000 999 998 997 996 995 994 9...

user output
1999
1 2 3 4 5 6 7 8 9 10 11 12 13 ...
Truncated

Test 30

Group: 3

Verdict:

input
BBBBBBBBAABBBBBBBBAABBBBBBBAAB...

correct output
218
1 626 607 519 415 5 975 957 92...

user output
-1 

Test 31

Group: 3

Verdict:

input
AABBBABAABABAAABBAAAAAAABBBAAB...

correct output
55
569 639 403 761 663 437 172 90...

user output
-1 

Test 32

Group: 3

Verdict:

input
ABBAAABAAABAAAAABBABABBABBABBB...

correct output
2
2 1 

user output
-1 

Test 33

Group: 3

Verdict: ACCEPTED

input
BAAABBABBBAAAABAAAABBBBABAABAA...

correct output
1

user output
1

Test 34

Group: 3

Verdict: ACCEPTED

input
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUU...

correct output
1000
1000 999 998 997 996 995 994 9...

user output
1999
1 2 3 4 5 6 7 8 9 10 11 12 13 ...
Truncated

Test 35

Group: 3

Verdict:

input
KSBMRKKSBMRZXBDKSKSBMRZXBDAMRZ...

correct output
178
723 731 1 935 857 820 760 735 ...

user output
-1 

Test 36

Group: 3

Verdict:

input
ILYLILYLVJILYLVJZCCQDLFRLSXZDM...

correct output
21
671 54 747 504 113 1 856 764 5...

user output
-1 

Test 37

Group: 3

Verdict:

input
ZZJZNKHDLJBPXIAZNJIIGBEEJFSDAF...

correct output
2
1 2 

user output
-1 

Test 38

Group: 3

Verdict: ACCEPTED

input
FIMWTOLSRKOWYDPCOFUJZMXJEJFKSU...

correct output
1

user output
1

Test 39

Group: 3

Verdict: ACCEPTED

input
AIVHCGUMKSTIYBRNPONXHRFVBKPYHX...

correct output
-1

user output
-1 

Test 40

Group: 3

Verdict: ACCEPTED

input
QPMSLIDCLFLBEXGVVQQNSVKJYXGETC...

correct output
-1

user output
-1 

Test 41

Group: 3

Verdict: ACCEPTED

input
ABABABABABABABABABABABABABABAB...

correct output
499
997 995 993 991 989 987 985 98...

user output
499
1 3 5 7 9 11 13 15 17 19 21 23...
Truncated

Test 42

Group: 3

Verdict: ACCEPTED

input
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...

correct output
-1

user output
-1