#include <bits/stdc++.h>
#include "dna.h"
using namespace std;
static int p[100005][6];
static int c[100005][3];
void init(std::string a, std::string b) {
int n = a.size();
for (int i = 0; i < n; i++) {
for (int j = 0; j < 6; j++) p[i + 1][j] = p[i][j];
for (int j = 0; j < 3; j++) c[i + 1][j] = c[i][j];
if (a[i] == 'A') c[i + 1][0]++;
if (b[i] == 'A') c[i + 1][0]--;
if (a[i] == 'C') c[i + 1][1]++;
if (b[i] == 'C') c[i + 1][1]--;
if (a[i] == 'T') c[i + 1][2]++;
if (b[i] == 'T') c[i + 1][2]--;
if (a[i] != b[i]) {
if (a[i] == 'A' && b[i] == 'T') p[i + 1][0]++;
else if (a[i] == 'A' && b[i] == 'C') p[i + 1][1]++;
else if (a[i] == 'C' && b[i] == 'T') p[i + 1][2]++;
else if (a[i] == 'T' && b[i] == 'C') p[i + 1][3]++;
else if (a[i] == 'C' && b[i] == 'A') p[i + 1][4]++;
else if (a[i] == 'T' && b[i] == 'A') p[i + 1][5]++;
}
}
}
int get_distance(int x, int y) {
if ((c[y + 1][0] - c[x][0]) != 0 || (c[y + 1][1] - c[x][1]) != 0 || (c[y + 1][2] - c[x][2]) != 0) return -1;
int v[6];
for (int i = 0; i < 6; i++) v[i] = p[y + 1][i] - p[x][i];
int res = 0;
int m0 = min(v[0], v[5]), m1 = min(v[1], v[4]), m2 = min(v[2], v[3]);
res += m0 + m1 + m2;
v[0] -= m0; v[5] -= m0;
v[1] -= m1; v[4] -= m1;
v[2] -= m2; v[3] -= m2;
int rem = 0;
for (int i = 0; i < 6; i++) rem += v[i];
return res + (rem / 3) * 2;
}