Dp problem Codeforces Round #367

here is the problem.
At first, I couldn’t solve it on my own so I took help from the editorial (here) and this is what I came up with:

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
using ll=long long;
int main()
{
   ll n;
   cin>>n;
   vector<ll> c;
   for(ll i=0; i<n; ++i)
   {
       ll x;
       cin>>x;
       c.push_back(x);
   }
   vector<string> vec;
   for(ll i=0; i<n; ++i)
   {
       string f;
       cin>>f;
       vec.push_back(f);
   }
   ll dp[n][2];
   for(ll i=0; i<=n; ++i)
   {
       for(ll j=0; j<2; ++j)
       {
           dp[i][j] = numeric_limits<ll>::max()/2;
       }
   }
   dp[0][0]=0;
   dp[0][1]=c[0];
   ll n1 = 0, n2 = 0;
   for(ll i=1; i<n; ++i)
   {
       n1 = 0;
       n2 = 0;
       if(vec[i]>=vec[i-1])
           dp[i][0]=min(dp[i][0],dp[i-1][0]);
       else n1++;
       reverse(vec[i-1].begin(), vec[i-1].end());
       if(vec[i]>=vec[i-1])
           dp[i][0]=min(dp[i][0], dp[i-1][1]);
       else n1++;
       reverse(vec[i-1].begin(), vec[i-1].end());
       reverse(vec[i].begin(), vec[i].end());
       if(vec[i]>=vec[i-1])
           dp[i][1]=min(dp[i][1],dp[i-1][0]+c[i]);
       else n2++;
       reverse(vec[i-1].begin(), vec[i-1].end());
       if(vec[i]>vec[i-1])
           dp[i][1]=min(dp[i][1], dp[i-1][1]+c[i]);
       else n2++;
       reverse(vec[i-1].begin(), vec[i-1].end());
       reverse(vec[i].begin(), vec[i].end());
       if(n1==2 && n2==2)
           break;

   }
   if(n1==2 && n2==2)
       cout<<-1;
   else cout<<min(dp[n-1][0], dp[n-1][1]);
}

But it’s giving me wrong answer.Can anyone help with whats wrong?