# include <iostream>
# include <cstdio>
using namespace std;
int L, ans;
char a[2002][2002];
int cross(int x, int y) {
int length=1;
if(x<=1||x>=L)return 1;
for (int i=1;; i++) {
if(x-i<=0||x+i>=L+1) return length;
else if (a[x-i][y]!=a[x+i][y]) return length;
else length +=2;
}
}
int down(int x, int y) {
int length=1;
if(y<=1||y>=L) return 1;
for (int i=1;; i++) {
if(y-i<=0||y+i>=L+1)return length;
else if (a[x][y-i]!=a[x][y+i]) return length;
else length += 2;
}
}
int MAXN(int a, int b) {
if(a >= b) return a;
else return b;
}
int main() {
cin>>L;
for(int i=1; i<=L; i++)
for(int j=1; j<=L; j++)
cin>>a[i][j];
int x, y;
cin>>x>>y;
ans=MAXN(cross(x,y),down(x,y));
cout<<ans;
return 0;
}
#include <cstdio>
#include <cmath>
const int N = 1e9;
int isnp[50005],p[50005],pcnt;
inline void getPrime(const int n = sqrt(N)) {
isnp[0]= isnp[1]=1;
for (register int i=2; i<=n; ++i) {
if (!isnp[i]) p[pcnt++]=i;
for (register int j=0; i*p[j]<=n && j<pcnt; ++j) {
isnp[i*p[j]]=1;
if (!(i% p[j])) break ;
}
}
}
int main() {
getPrime(); int n;
while (scanf(" %d", &n) && n) {
int _sqrt = sqrt(n),ans= n;
for (register int j = 0; p[j]<=_sqrt && j<pcnt; ++j) {
if (n % p[j]==0) {
while (n % p[j]==0)n/=p[j];
ans = 1ll * ans *(p[j]-1)/ p[j];
}
}
if (n!=1) ans = 1ll* ans * (n-1)/n;
printf("%d\n", ans);
}
return 0;
}
#include <iostream>
using namespace std;
const int inf =0x3f3f3f3,N=4e5+5;
struct edge {
int to,nt ;
}E[N<<1];
int cnt, n,m,rt,MX;
int H[N],sz[N],mxs[N];
void add_edge(int u, int v) {
E[++cnt]=(edge) {v,H[u]};
H[u]=cnt;
}
void dfs(int u, int fa) {
sz[u]=1;
for (int e=H[u]; e; e=E[e].nt) {
int v=E[e].to;
if (v==fa) continue;
dfs(v,u);
sz[u]+=sz[v];
mxs[u]=max(mxs[u],sz[v]);
}
mxs[u] =max(mxs[u],n-sz[u]);
if (mxs[u]<mxs[rt])rt=u;
if (mxs[u]==mxs[rt] &&u<rt)rt=u;
}
int main() {
cin>>n,
rt =cnt= 0;
for (int i=1; i<=n; i++) {
int u,v;
cin>>u>>v;
add_edge(u,v);
add_edge(v,u);
}
mxs[0] = inf ;
dfs(1,0);
cout<<rt<<' '<<mxs[rt]<<'\n';
return 0;
}
#include <iostream>
using namespace std;
int solve(int m);
int main() {
freopen("demo.out","w", stdout);
int m;
do {
scanf("%d",&m);
if(m>0 && m<1000)
printf("%d\n",___(1)___);
} while (m>0 && m< 1000);
return 0;
}
int solve(int m) {
int i,t,s;//翻转的次数
int flag;
if(m==1)
s=___(2)___;
else {
d=2*m+1;
//确定硬币是经过偶数次翻转还是奇数次翻转
t= 2;
//表示一个COIN必须翻转偶数次,才能从正面继续翻到正面
i=1;//翻转的轮数,每轮为从1翻转到m
flag=0;//退出循环标志,翻转完成标志
do {
if(t==1) {
s=___(3)___;
flag = 1;
} else if(___(4)___) {
s=i*m-1;
flag=1;
} else {
t=___(5)___;
}
i=i+1;
} while(!flag);
}
return s;
}
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int n= 8;
char str1[2*n][n];
char str2[40]=" ";
int main() {
int s1,s2,x,s,t;
s1=s2=x= 0;
gets(str1[0]);
while(___(1)___) {
s=t=0;
for (int i = 0; i< n; i++) {
if (str1[s2][i]=='1')
s++;
if (str1[s2][i]=='0')
t++;
}
if(___(2)___)
str2[x++]='B';
else if(___(3)___)
str2[x++]='Z';
else {
str2[x++]='F';
int j=(s+t)>>1;
for (int k=n*2-2; k>=___(4)___; k--)
for (int i=0; i<n; i++)
str1[k+2][i]=str1[k][i];
s1 += 2;
for (int i=0; i<j; i++) {
str1[s2+1][i]=str1[s2][i];
str1[s2+2][i]=___(5)___;
}
for (int i=___(6)___; ___(7)___; i++) {
str1[s2+1][i]=' ';
str1[s2+2][i]=' ';
}
}
s2++;
}
puts(str2);
return 0;
}