#include <bits/stdc++.h>
#define MAXN 43
#define MAXR 257
using namespace std;
int dsu[MAXN];
vector<pair<int,pair<int,int> > > e;
int mn[3][MAXR][MAXR][MAXR];
int root(int u)
{
    while(dsu[u]!=u)
    {
        dsu[u]=dsu[dsu[u]];
        u=dsu[u];
    }
    return u;
}
void Resi(int N, int R, int C, int Q, int** U, int** V, int** W,
	int* X1, int* Y1, int* X2, int* Y2, int* O)
{
    for(int i=1;i<=R;i++) for(int j=1;j<=C;j++)
    {
        mn[0][i][j][j]=1000000000;
        mn[1][i][j][j]=1000000000;
        mn[2][i][j][j]=1000000000;
        mn[U[i][j]+V[i][j]-3][i][j][j]=W[i][j];
        for(int k=j+1;k<=C;k++)
        {
            mn[0][i][j][k]=mn[0][i][j][k-1];
            mn[1][i][j][k]=mn[1][i][j][k-1];
            mn[2][i][j][k]=mn[2][i][j][k-1];
            mn[U[i][k]+V[i][k]-3][i][j][k]=min(W[i][j],mn[U[i][k]+V[i][k]-3][i][j][k]);
        }
    }
	for(int q=1;q<=Q;q++)
    {
        if(N==2)
        {
            int sol=1000000000;
            for(int i=X1[q];i<=X2[q];i++) sol=min(sol,mn[0][i][Y1[q]][Y2[q]]);
            O[q]=sol;
            continue;
        }
        for(int i=1;i<=N;i++) dsu[i]=i;
        e.clear();
        for(int i=X1[q];i<=X2[q];i++) for(int j=Y1[q];j<=Y2[q];j++)
            e.push_back(make_pair(W[i][j],make_pair(V[i][j],U[i][j])));
        sort(e.begin(),e.end());
        int res=0;
        for(int i=0;i<e.size();i++)
        {
            int u=e[i].second.first,v=e[i].second.second;
            if(root(u)!=root(v))
            {
                res+=e[i].first;
                dsu[root(u)]=root(v);
            }
        }
        int c=root(1);
        bool pr=false;
        for(int i=1;i<=N;i++) if(root(i)!=c) pr=true;
        if(pr) O[q]=-1;
        else O[q]=res;
    }
}