package main
import (
"bufio"
"io"
"os"
)
type FastScanner struct {
data []byte
i int
n int
}
func NewFastScanner() *FastScanner {
data, _ := io.ReadAll(os.Stdin)
return &FastScanner{data: data, n: len(data)}
}
func (fs *FastScanner) skip() {
for fs.i < fs.n && fs.data[fs.i] <= ' ' {
fs.i++
}
}
func (fs *FastScanner) NextString() string {
fs.skip()
start := fs.i
for fs.i < fs.n && fs.data[fs.i] > ' ' {
fs.i++
}
return string(fs.data[start:fs.i])
}
func (fs *FastScanner) NextInt() int {
fs.skip()
val := 0
for fs.i < fs.n {
c := fs.data[fs.i]
if c < '0' || c > '9' {
break
}
val = val*10 + int(c-'0')
fs.i++
}
return val
}
func build(s string) ([]int, []int) {
n := len(s)
pref := make([]int, n+1)
prev := make([]int, n+1)
for i := 1; i <= n; i++ {
pref[i] = pref[i-1]
prev[i] = prev[i-1]
if s[i-1] != 'A' {
pref[i]++
prev[i] = i
}
}
return pref, prev
}
func info(pref, prev []int, l, r int) (int, int) {
cnt := pref[r] - pref[l-1]
last := prev[r]
if last < l {
return cnt, r - l + 1
}
return cnt, r - last
}
func can(cs, ts, ct, tt int) bool {
if cs > ct {
return false
}
if (cs&1) != (ct&1) {
return false
}
if ts < tt {
return false
}
if cs == ct {
return (ts-tt)%3 == 0
}
if cs == 0 {
return ts > tt
}
return true
}
func main() {
fs := NewFastScanner()
S := fs.NextString()
T := fs.NextString()
ps, ls := build(S)
pt, lt := build(T)
q := fs.NextInt()
ans := make([]byte, q)
for i := 0; i < q; i++ {
a := fs.NextInt()
b := fs.NextInt()
c := fs.NextInt()
d := fs.NextInt()
cs, ts := info(ps, ls, a, b)
ct, tt := info(pt, lt, c, d)
if can(cs, ts, ct, tt) {
ans[i] = '1'
} else {
ans[i] = '0'
}
}
w := bufio.NewWriterSize(os.Stdout, 1<<20)
w.Write(ans)
w.WriteByte('\n')
w.Flush()
}