1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
#include<bits/stdc++.h>
using namespace std;
int n,m,q,slowo,kol[15001][841],wier[15001][841],wcz,t,xj,yj,xd,yd,tuta,pien,piem,najpx[15001][841],najpy[15001][841],pam,najpiexp[15001][841],najpiexl[15001][841],najpieyd[15001][841],najpieyg[15001][841];
char slow[10];
//840
int main()
{
    scanf("%d%d%d",&n,&m,&q);
    pien=sqrt(n);
    piem=sqrt(m);
    for(int i=1;i<=n;++i)
    {
        for(int j=1;j<=m;++j)
        {
            wcz='-';
            while(wcz!='0'&&wcz!='1')
            wcz=getchar();
            tuta=0;
            while(wcz=='0'||wcz=='1')
            {
                slow[tuta]=wcz;
                ++tuta;
                wcz=getchar();
            }
            for(int k=0;k<tuta;++k)
            {
                if(slow[k]=='0')
                {
                    for(int l=k;l<840;l+=tuta)
                    {
                        ++kol[j][l];
                    }
                }
                else
                {
                    for(int l=k;l<840;l+=tuta)
                    {
                        ++wier[i][l];
                    }
                }
            }
        }
    }
    for(int i=1;i<=n;++i)
    {
        tuta=0;
        while(wier[i][tuta]==m)
        {
            ++tuta;
        }
        for(int k=0;k<840;++k)
        {
            if(tuta==k-1)
            {
                ++tuta;
                if(tuta==840)
                {
                    tuta=0;
                }
                while(wier[i][tuta]==m)
                {
                    ++tuta;
                    if(tuta==840)
                    {
                        tuta=0;
                    }
                } 
            }
            if(tuta>=k)
            {
                najpy[i][k]=tuta-k;
            }
            else
            najpy[i][k]=tuta+840-k;
            if(i-pien>=0)
            {
                for(int j=i;j>i-pien;--j)
                {
                    najpieyg[i][k]+=najpy[j][(k+najpieyg[i][k])%840];
                }
            }
        }
    }
    for(int i=0;i<n;++i)
    {
        if(i+pien>n)
        break;
        for(int k=0;k<840;++k)
        {
            for(int j=i+1;j<=i+pien;++j)
            {
                najpieyd[i][k]+=najpy[j][(k+najpieyd[i][k])%840];
            }
        }
    }
    for(int i=1;i<=m;++i)
    {
        tuta=0;
        while(kol[i][tuta]==n)
        {
            ++tuta;
        }
        for(int k=0;k<840;++k)
        {
            if(tuta==k-1)
            {
                ++tuta;
                while(kol[i][tuta]==n)
                {
                    ++tuta;
                    if(tuta==840)
                    {
                        tuta=0;
                    }
                } 
            }
            if(tuta>=k)
            {
                najpx[i][k]=tuta-k;
            }
            else
            najpx[i][k]=tuta+840-k;
            if(i-piem>=0)
            {
                for(int j=i;j>i-piem;--j)
                {
                    najpiexl[i][k]+=najpx[j][(k+najpiexl[i][k])%840];
                }
            }
        }
    }
    for(int i=0;i<m;++i)
    {
        if(i+piem>m)
        break;
        for(int k=0;k<840;++k)
        {
            for(int j=i+1;j<=i+piem;++j)
            {
                najpiexp[i][k]+=najpx[j][(k+najpiexp[i][k])%840];
            }
        }
    }
    if(max(n,m)<=100)
    {
        while(q)
        {
            --q;
            scanf("%d%d%d%d%d",&t,&yj,&xj,&yd,&xd);
            pam=t;
            while(xj>xd)
            {
                t+=najpx[xj][t%840];
                --xj;
            }
            while(xj<xd)
            {
                t+=najpx[xj+1][t%840];
                ++xj;
            }
            swap(pam,t);
            while(yj>yd)
            {
                t+=najpy[yj][t%840];
                --yj;
            }
            while(yj<yd)
            {
                t+=najpy[yj+1][t%840];
                ++yj;
            }
            printf("%d\n",max(pam,t));
        }
    }
    else
    {
        while(q)
        {
            --q;
            scanf("%d%d%d%d%d",&t,&yj,&xj,&yd,&xd);
            pam=t;
            while(xj-piem>=xd)
            {
                t+=najpiexl[xj][t%840];
                xj-=piem;
            }
            while(xj>xd)
            {
                t+=najpx[xj][t%840];
                --xj;
            }
            while(xj+piem<=xd)
            {
                t+=najpiexp[xj][t%840];
                xj+=piem;
            }
            while(xj<xd)
            {
                t+=najpx[xj+1][t%840];
                ++xj;
            }
            swap(pam,t);
            while(yj-pien>=yd)
            {
                t+=najpieyg[yj][t%840];
                yj-=pien;
            }
            while(yj>yd)
            {
                t+=najpy[yj][t%840];
                --yj;
            }
            while(yj+pien<=yd)
            {
                t+=najpieyd[yj][t%840];
                yj+=pien;
            }
            while(yj<yd)
            {
                t+=najpy[yj+1][t%840];
                ++yj;
            }
            printf("%d\n",max(pam,t));
        }
    }
    return 0;
}