直接暴力枚举,每次找最长的
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<set>
#include<queue>
#include<stack>
#include<map>
using namespace std;
typedef long long ll;
const int maxn = 3e3 + 7, INF = 0x7f7f7f7f, mod = 1e9 + 7;
char s[maxn], t[maxn];
struct node {
int l_, r_;
}a[maxn];
int main() {
scanf("%s%s", s, t);
int len1 = strlen(s), len2 = strlen(t);
int cnt = 0, flag = 0;
for(int i = 0; i < len2; ++i) {
int len = 0, l_ = 0, r_ = 0;
for(int j = 0; j < len1; ++j) {
if(t[i] == s[j]) {
//cout << i << " == " << j << endl;
int l1 = j;
int k;
for(k = 1; j-k >= 0; ++k) { // zuo
if(t[i+k] != s[j-k]) break;
l1--;//cout << "23333" << endl;
}
if(k > len) { len = k; l_ = j; r_ = l1; }
l1 = j;
for(k = 1; j+k < len1; ++k) { // you
if(t[i+k] != s[j+k]) break;
l1++;
}
if(k > len) { len = k; l_ = j; r_ = l1; }
}
//cout << "23333" << endl;
}
if(len == 0) { flag = 1; break; }
//cout << len << " " << l_ << " " << r_ << endl;
i += len-1;
a[cnt].l_ = l_;
a[cnt].r_ = r_;
cnt++;
}
if(flag) puts("-1");
else {
cout << cnt << endl;
for(int i = 0; i < cnt; ++i) {
printf("%d %d\n", a[i].l_+1, a[i].r_+1);
}
}
return 0;
}