#line 2 "cpplib/util/template.hpp" #pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #pragma GCC target("avx") #include using namespace std; struct __INIT__{__INIT__(){cin.tie(0);ios::sync_with_stdio(false);cout< vec; typedef vector> mat; typedef vector>> mat3; typedef vector svec; typedef vector> smat; templateinline void output(T t){bool f=0;for(auto i:t){cout<<(f?" ":"")<inline void output2(T t){for(auto i:t)output(i);} templateinline void debug(T t){bool f=0;for(auto i:t){cerr<<(f?" ":"")<inline void debug2(T t){for(auto i:t)output(i);} #define loop(n) for(long long _=0;_<(long long)(n);++_) #define rep(i,...) for(auto i:range(__VA_ARGS__)) #define rrep(i,...) for(auto i:reversed(range(__VA_ARGS__))) #define repi(i,a,b) for(lint i=lint(a);i<(lint)(b);++i) #define rrepi(i,a,b) for(lint i=lint(b)-1;i>=lint(a);--i) #define irep(i) for(lint i=0;;++i) inline vector range(long long n){if(n<=0)return vector();vectorv(n);iota(v.begin(),v.end(),0LL);return v;} inline vector range(long long a,long long b){if(b<=a)return vector();vectorv(b-a);iota(v.begin(),v.end(),a);return v;} inline vector range(long long a,long long b,long long c){if((b-a+c-1)/c<=0)return vector();vectorv((b-a+c-1)/c);for(int i=0;i<(int)v.size();++i)v[i]=i?v[i-1]+c:a;return v;} templateinline T reversed(T v){reverse(v.begin(),v.end());return v;} #define all(n) begin(n),end(n) templatebool chmin(T& s,const E& t){bool res=s>t;s=min(s,t);return res;} templatebool chmax(T& s,const E& t){bool res=s(s,t);return res;} const vector dx={1,0,-1,0,1,1,-1,-1}; const vector dy={0,1,0,-1,1,-1,1,-1}; #define SUM(v) accumulate(all(v),0LL) templateauto make_vector(T x,int arg,Args ...args){if constexpr(sizeof...(args)==0)return vector(arg,x);else return vector(arg,make_vector(x,args...));} #define extrep(v,...) for(auto v:__MAKE_MAT__({__VA_ARGS__})) vector> __MAKE_MAT__(vector v){if(v.empty())return vector>(1,vector());long long n=v.back();v.pop_back();vector> ret;vector> tmp=__MAKE_MAT__(v);for(auto e:tmp)for(long long i=0;i data; int sz; public: UF(int sz):sz(sz){data.resize(sz,-1);} bool unite(int x,int y){ x=root(x);y=root(y); if(x==y)return 0; if(data[x]>data[y])swap(x,y); data[x]+=data[y]; data[y]=x; sz--; return 1; } inline int root(int x){return data[x]<0?x:data[x]=root(data[x]);} inline bool same(int x, int y){return root(x)==root(y);} inline int size(){return sz;} inline int size(int x){return -data[root(x)];} }; #line 3 "code.cpp" int main(){ // lint n; // cin>>n; // vec a(n); // vec x(n),y(n); // auto dist=[](lint i,lint j){ // return sqrtl((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); // }; // rep(i,n){ // cin>>x[i]>>y[i]; // } // rep() lint n,m,q; cin>>n>>m>>q; UF uf(n*7); vectors(n); rep(i,n)cin>>s[i]; rep(i,n){ rep(j,7){ if(s[i][j]=='1'&&s[i][(j+1)%7]=='1'){ uf.unite(i*7+j,i*7+(j+1)%7); } } } mat g(n); rep(i,m){ lint p,q; cin>>p>>q; p--;q--; g[p].push_back(q); g[q].push_back(p); rep(j,7){ if(s[p][j]=='1'&&s[q][j]=='1'){ uf.unite(p*7+j,q*7+j); } } } rep(i,q){ lint c,p,q; cin>>c>>p>>q; if(c==1){ p--;q--; s[p][q]='1'; if(s[p][(q+1)%7]=='1')uf.unite(p*7+q,p*7+(q+1)%7); if(s[p][(q+6)%7]=='1')uf.unite(p*7+q,p*7+(q+6)%7); for(auto e:g[p]){ if(s[e][q]=='1'){ uf.unite(p*7+q,e*7+q); } } }else{ p--; cout<