Grid Path (Easy) Practice Coding Problem

Can someone please tell what is wrong in my logic/code…It is givinng WA on testcase 4
#include<bits/stdc++.h>
define ll long long int
define itn int
define xin cin
define pb push_back
define vi vector
define vvi vector<vector>
define vl vector
define vvl vector<vector>
define vp vector<pair<ll,ll>>
using namespace std;
const ll mod= 998244353;
const ll MOD=1e9+7;
const ll INF=1e18;
/**
vectorfact(1e6+7);
vectorifact(1e6+7);
vector isPrime(1e6+1,true);
vectorspf(1e6+1);
void precompute_prime(){ isPrime[0]=false; isPrime[1]=false; for(ll i=2;i<=1e5;i++) { if(isPrime[i]) { prime.pb(i);for(ll j=ii;j<=1e5;j+=i){ isPrime[j]=false; } } }}
vector primefactorisation(ll n){ vectorv; for(ll i=2;i
i<=n;i++){ while(n%i==0){ v.push_back(i);n/=i; }} if(n>1) v.push_back(n); return v;}
void precompute_spf(){ for ( ll i=1;i<=1e6;i++) spf[i]=i;for(ll i=2;i<=1e6;i++){ if(spf[i]==i){ for(ll j=ii;j<=1e6;j+=i){ if(spf[j]==j)spf[j]=i;} }}}
ll pow(ll a,ll b, ll c){ ll res=1; while(b>0) { if(b&1) { res=((res%c)
(a%c))%c;} a=((a)*(a))%c; b/=2;}return res%c;}
void precompute(){fact[0]=1;ifact[0]=1;for(int i=1;i<=1e6;i++){fact[i]=(fact[i-1]*i)%MOD; ifact[i]=pow(fact[i],MOD-2,MOD);}}
ll nCr(int n , int r){ if(n<r ) return 0ll; return (fact[n]*pow((fact[r]*fact[n-r])%MOD,MOD-2,MOD))%MOD;}
bool cmp(pair<ll,ll>&a,pair<ll,ll>&b){ if(a.first!=b.first) return a.first<b.first;else return a.second>b.second;}
*/

int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
ll t=1;
cin>>t;
while(t–)
{
ll n; ll q;

 cin>>n;cin>>q;
 char a[2][n];
 for(ll i=0;i<2;i++)
 {
    for(ll j=0;j<n;j++)
        cin>>a[i][j];
 } stack<ll>st1,st2;
 vvl ops(2,vl(n+2,1e9));ll j=0;ll c=0;
 for(ll i=n-1;i>=0;i--)
 {  
    if(a[0][i]=='1')
        st1.push(i+1);
 }
 j=n-1;ll ans=1e9;//cout<<st1.size()<<" ";
 for(ll i=0;i<n;i++)
 {
   if(a[1][i]=='1')
    st2.push(i+1);
 }
 if(st1.size() + st2.size()  <=n)
 {
    cout<<-1<<endl; continue;
 }
 ll i=0;//cout<<st1.size();
 ll r1=0;
  while(!st1.empty())
  {
    ll d1=(i+1)-st1.top()+r1;
     if(d1>=1e7)
     {   st1.pop(); i++;
        ops[0][i]=1e9; continue;
     }
     ops[0][i]=st1.top()-(i+1)+r1;
    r1=ops[0][i]; i++;
    st1.pop();
  }
  i=n-1;r1=0;
  while(!st2.empty())
  {
  
   ll d1=(i+1)-st2.top()+r1;
   if(d1>=1e7)
   { i--; st2.pop();
     ops[1][i]=1e9; continue;
   }
    ops[1][i]=(i+1)-st2.top() +r1 ;
    r1=ops[1][i];
    st2.pop(); i--;
  }
  for(ll i=0;i<n;i++)
  {
   
    ans=min(ans,ops[0][i]+ops[1][i]);
  }
 if(ans>=1e9)
 {
    cout<<-1<<endl;
 }
 else cout<<ans<<endl;

}
}