#include "dna.h"
#include <vector>
#include <map>
#include <iostream>
using namespace std;
using pcc = pair<char,char>;
vector<int> pref[6] = {{0},{0},{0},{0},{0},{0}};
map<pcc,int> mp = {
{{'A','C'},0},
{{'C','A'},3},
{{'T','A'},1},
{{'A','T'},4},
{{'C','T'},2},
{{'T','C'},5},
};
void init(std::string a, std::string b) {
int n = a.size();
for(int i{};i < n;i++){
for(int j{};j < 6;j++){
pref[j].emplace_back(pref[j].back());
}
if(a[i] != b[i]) pref[mp[{a[i],b[i]}]].back()++;
// cout << pref[0].back() << " ";
// cout << pref[1].back() << " ";
// cout << pref[2].back() << " ";
// cout << pref[3].back() << " ";
// cout << pref[4].back() << " ";
// cout << pref[5].back() << " ";
// cout << endl;
}
}
int get_distance(int x, int y) {
int value[6] = {0,0,0,0,0,0};
for(int i{};i < 6;i++){
value[i] = pref[i][y+1]-pref[i][x];
//cout << i << " " << value[i] << endl;
}
if((value[0]+value[4]) != (value[3]+value[1])) return -1;
if((value[2]+value[3]) != (value[0]+value[5])) return -1;
if((value[1]+value[5]) != (value[4]+value[2])) return -1;
int val1 = min(value[3],value[0]);
int val2 = min(value[4],value[1]);
int val3 = min(value[5],value[2]);
value[0] -= val1;
value[3] -= val1;
value[1] -= val2;
value[4] -= val2;
value[2] -= val3;
value[5] -= val3;
int sum = 0;
for(int i{};i < 6;i++){
sum += value[i];
}
return (2*(sum/3))+val1+val2+val3;
}