#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ull unsigned long long
const int N = 1e6 + 10;
const int base = 13331;
string s;
int a[N];
ull pw[N], hs[N];
int len;
ull has(int l, int r) {
return hs[r] - hs[l - 1] * pw[r - l + 1];
}
int sa(int a, int b) {
int l = 0, r = min(len - a, len - b) + 1;
while (l < r) {
int mid = (l + r + 1) / 2;
if (has(a, a + mid - 1) == has(b, b + mid - 1)) l = mid;
else r = mid - 1;
}
return l;
}
bool cmp(int x, int y) {
int len = sa(x, y);
if (s[len + x] < s[len + y]) return 1;
else return 0;
}
signed main() {
cin >> s;
len = s.size();
pw[0] = 1;
s = ' ' + s;
for (int i = 1; i <= len; i++) {
hs[i] = hs[i - 1] * base + s[i];
pw[i] = pw[i - 1] * base;
a[i] = i;
}
sort(a + 1, a + 1 + len, cmp);
for (int i = 1; i <= len; i++) cout << a[i] - 1 << ' ';
cout << '\n';
for (int i = 0; i < len; i++) cout << sa(a[i], a[i + 1]) << ' ';
cout << '\n';
}
#include<bits/stdc++.h>
#define int long long
using namespace std;
typedef unsigned long long ull;
const int N = 1e6 + 10;
const int base = 998244353;
ull pw[N], ha[N];
string s;
int t;
ull hs(int l, int r) {
return ha[r] - ha[l - 1] * pw[r - l + 1];
}
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> s >> t;
s = ' ' + s;
int len = s.size();
pw[0] = 1;
for (int i = 1; i <= len; i++) {
ha[i] = ha[i - 1] * base + s[i];
pw[i] = pw[i - 1] * base;
}
while (t--) {
int l1, r1, l2, r2;
cin >> l1 >> r1 >> l2 >> r2;
ull a = hs(l1, r1);
ull b = hs(l2, r2);
if (a == b) cout << "Yes\n";
else cout << "No\n";
}
}