#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
fstream plik;
plik.open("dane.txt");
string tab1[200];
string tab2[200];
for (int i = 0; i < 200; i++)
{
plik >> tab1[i];
plik >> tab2[i];
//cout << tab1[i] << " " << tab2[i] << endl;
}
//5.1
int licznik = 0;
for (int i = 0; i < 200; i++)
{
int dl1 = tab1[i].length();
int err = 0;
for (int j = 0; j < dl1; j++)
{
if (tab1[i][j] != tab1[i][dl1 - 1 - j]) err++;
}
if (err == 0) licznik++;
}
for (int i = 0; i < 200; i++)
{
int dl2 = tab2[i].length();
int err = 0;
for (int j = 0; j < dl2; j++)
{
if (tab2[i][j] != tab2[i][dl2 - 1 - j]) err++;
}
if (err == 0) licznik++;
}
//cout << licznik << endl;
//5.2
int suma = 0;
for (int i = 0; i < 200; i++)
{
if (tab1[i].length()>tab2[i].length())
{
size_t found = tab1[i].find(tab2[i]);
if (found != std::string::npos)
{
//cout << tab1[i] << " " << tab2[i] << endl;
suma++;
}
}
else
{
size_t found = tab2[i].find(tab1[i]);
if (found != std::string::npos)
{
//cout << tab1[i] << " " << tab2[i] << endl;
suma++;
}
}
}
//cout << suma << endl;
//5.3
int obr = 0;
for (int i = 0; i < 200; i++)
{
int zlepy = 0;
if (tab1[i].length()>tab2[i].length())
{
int dl1 = tab1[i].length();
//cout << tab1[i] << " " << tab2[i] << endl;
for (int j = 0; j < tab2[i].length(); j++) //zmiana //#GOOD
{
int zgoda = 0;
int err = 0;
for (int k = tab2[i].length()-1; k >= j; k--)
{
if (tab1[i][k-j] == tab2[i][k]) zgoda++;
else err++;
//cout << tab1[i][k - j] << ":" << tab2[i][k]<<" ";
}
if (err == 0 && zgoda>0) zlepy++;
//cout << endl;
}
for (int j = tab2[i].length()-1; j >=0; j--) //zmiana //#GOOD
{
int zgoda = 0;
int err = 0;
for (int k = 0; k <= j; k++)
{
if (tab1[i][dl1-1-j+k] == tab2[i][k]) zgoda++;
else err++;
//cout << tab1[i][dl1 - 1 - j + k] << ":" << tab2[i][k] << " ";
}
if (err == 0 && zgoda>0) zlepy++;
//cout << endl;
}
if (zlepy == 0)
{
obr++;
//cout << tab1[i] << " " << tab2[i] << endl;
}
}
else
{
for (int j = 0; j < tab1[i].length(); j++) //zmiana //#GOOD
{
int zgoda = 0;
int err = 0;
for (int k = tab1[i].length() - 1; k >= j; k--)
{
if (tab2[i][k - j] == tab1[i][k]) zgoda++;
else err++;
}
if (err == 0 && zgoda>0) zlepy++;
}
for (int j = tab1[i].length()-1; j >= 0; j--) //zmiana //#GOOD
{
int zgoda = 0;
int err = 0;
for (int k = 0; k <= j; k++)
{
if (tab2[i][tab2[i].length() - 1 - j + k] == tab1[i][k]) zgoda++;
}
if (err == 0 && zgoda>0) zlepy++;
else err++;
}
if (zlepy == 0)
{
obr++;
//cout << tab1[i] << " " << tab2[i] << endl;
}
}
}
//cout << obr << endl;
//5.4
string kupa[200][2];
// JEDNO W DRUGIM INDEKS KOD: 1
for (int i = 0; i < 200; i++)
{
if (tab1[i].length()>tab2[i].length())
{
size_t found = tab1[i].find(tab2[i]);
if (found != std::string::npos)
{
//cout << tab1[i] << " " << tab2[i] << endl;
kupa[i][0] = '1';
kupa[i][1] = tab1[i];
}
}
else
{
size_t found = tab2[i].find(tab1[i]);
if (found != std::string::npos)
{
//cout << tab1[i] << " " << tab2[i] << endl;
kupa[i][0] = '1';
kupa[i][1] = tab2[i];
}
}
}
// ZLEPA INDEKS KOD: 2
// ODDZIELNE INDEKS KOD: 3
for (int i = 0; i < 200; i++)
{
int zlepy = 0;
if (tab1[i].length()>tab2[i].length())
{
int dl1 = tab1[i].length();
//cout << tab1[i] << " " << tab2[i] << endl;
for (int j = 0; j < tab2[i].length(); j++) //zmiana //#GOOD
{
int zgoda = 0;
int err = 0;
for (int k = tab2[i].length() - 1; k >= j; k--)
{
if (tab1[i][k - j] == tab2[i][k]) zgoda++;
else err++;
//cout << tab1[i][k - j] << ":" << tab2[i][k]<<" ";
}
if (err == 0 && zgoda>0 && kupa[i][0] != "1" && kupa[i][0] != "2")
{
kupa[i][0] = '2';
for (int l = 0; l < tab1[i].length(); l++) kupa[i][1] = kupa[i][1] + tab1[i][l];
for (int p = j - 1; p >= 0; p--) kupa[i][1] = tab2[i][p] + kupa[i][1];
}
//cout << endl;
}
for (int j = tab2[i].length() - 1; j >= 0; j--) //zmiana //#GOOD
{
int zgoda = 0;
int err = 0;
int rem;
for (int k = 0; k <= j; k++)
{
if (tab1[i][dl1 - 1 - j + k] == tab2[i][k]) zgoda++;
else err++;
//cout << tab1[i][dl1 - 1 - j + k] << ":" << tab2[i][k] << " ";
rem = k;
}
if (err == 0 && zgoda>0 && kupa[i][0] != "1" && kupa[i][0] != "2")
{
kupa[i][0] = '2';
for (int l = 0; l < tab1[i].length(); l++) kupa[i][1] = kupa[i][1] + tab1[i][l];
for (int p =rem+1; p <tab2[i].length()-1; p++) kupa[i][1] = kupa[i][1] + tab2[i][p];
}
//cout << endl;
}
if (zlepy == 0 && kupa[i][0] != "1" && kupa[i][0] != "2")
{
kupa[i][0] = '3';
kupa[i][1] = tab1[i] + tab2[i];
//cout << tab1[i] << " " << tab2[i] << endl;
}
}
else
{
for (int j = 0; j < tab1[i].length(); j++) //zmiana //#GOOD
{
int zgoda = 0;
int err = 0;
for (int k = tab1[i].length() - 1; k >= j; k--)
{
if (tab2[i][k - j] == tab1[i][k]) zgoda++;
}
if (err == 0 && zgoda>0 && kupa[i][0] != "1" && kupa[i][0] != "2")
{
kupa[i][0] = '2';
for (int l = 0; l < tab2[i].length(); l++) kupa[i][1] = kupa[i][1] + tab2[i][l];
for (int p = j - 1; p >= 0; p--) kupa[i][1] = tab1[i][p] + kupa[i][1];
}
}
for (int j = tab1[i].length() - 1; j >= 0; j--) //zmiana //#GOOD
{
int zgoda = 0;
int err = 0;
int rem;
for (int k = 0; k <= j; k++)
{
if (tab2[i][tab2[i].length() - 1 - j + k] == tab1[i][k]) zgoda++;
rem = k;
}
if (err == 0 && zgoda>0 && kupa[i][0] != "1" && kupa[i][0] != "2")
{
kupa[i][0] = '2';
for (int l = 0; l < tab2[i].length(); l++) kupa[i][1] = kupa[i][1] + tab2[i][l];
for (int p = rem + 1; p <tab1[i].length() - 1; p++) kupa[i][1] = kupa[i][1] + tab1[i][p];
}
}
if (zlepy == 0 && kupa[i][0] != "1" && kupa[i][0] != "2")
{
kupa[i][0] = '3';
kupa[i][1] = tab1[i] + tab2[i];
//cout << tab1[i] << " " << tab2[i] << endl;
}
}
}
for (int i = 0; i < 200; i++) cout << kupa[i][0] << " " << kupa[i][1]<<endl;
system("PAUSE");
return 0;
}