QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#310311#5446. 琪露诺的符卡交换qL40 7ms4296kbC++2015.6kb2024-01-21 10:51:042024-01-21 10:51:05

Judging History

你现在查看的是最新测评结果

  • [2024-01-21 10:51:05]
  • 评测
  • 测评结果:40
  • 用时:7ms
  • 内存:4296kb
  • [2024-01-21 10:51:04]
  • 提交

answer

#include<cstdio>
#include<cstdint>

#include<array>
#include<utility>
#include<initializer_list>
#include<limits>

#include<string>
#include<vector>
#include<queue>

/**
 * Author: Cracker
 * Version: 0x02
*/
namespace Default_Source{
#ifndef _linux_
#define likely(x) __builtin_expect(!!(x),1)
#define unlikely(x) __builtin_expect(!!(x),0)
#endif
	namespace{
		template<typename T>
		constexpr T Inf{std::numeric_limits<T>::max()};
		template<typename T>
		constexpr T abs(const T&x){return x<T(0)?-x:x;}
		template<typename T>
		constexpr const T&min(const T&lhs,const T&rhs){return lhs<rhs?lhs:rhs;}
		template<typename T>
		constexpr T min(const std::initializer_list<T>&L){
			T ret=*L.begin();
			for(const T&it:L) ret=min(ret,it);
			return ret;
		}
		template<typename T>
		constexpr const T&max(const T&lhs,const T&rhs){return lhs<rhs?rhs:lhs;}
		template<typename T>
		constexpr T max(const std::initializer_list<T>&L){
			T ret=*L.begin();
			for(const T&it:L) ret=max(ret,it);
			return ret;
		}
		template<typename T>
		constexpr void swap(T&x,T&y){
			T tmp=std::move(x);
			x=std::move(y),y=std::move(tmp);
		}
	}
	namespace Bit{
		template<typename T>
		typename std::enable_if<std::is_signed<T>::value,T>::type bswap(T value){
			size_t n{(sizeof(T)<<3)-1};
			T ret{};
			for(size_t i=0,j=n-1;i<n;++i,--j) if((value>>i)&1) ret|=1<<j;
			return ret;
		}
		template<typename T>
		typename std::enable_if<std::is_unsigned<T>::value,T>::type bswap(T value){
			size_t n{sizeof(T)<<3};
			T ret{};
			for(size_t i=0,j=n-1;i<n;++i,--j) if((value>>i)&1) ret|=1<<j;
			return ret;
		}
	}
	namespace IO{
		namespace Flush{
			struct Input_Flush_Base{char getc(){return getchar();}};
			template<size_t BUFSIZE>
			class Fast_Input_Flush_Base{
			protected:
				char buf[BUFSIZE],*cur=buf;
			public:
				Fast_Input_Flush_Base(){std::fread(buf,1,BUFSIZE,stdin);}
				char getc(){return*cur++;}
			};
			template<size_t BUFSIZE>
			class Fast_Input_Flush_Safer{
			protected:
				char buf[BUFSIZE],*cur,*nil;
				bool reload(){return (nil=(cur=buf)+std::fread(buf,1,BUFSIZE,stdin))!=buf;}
			public:
				Fast_Input_Flush_Safer(){reload();}
				char getc(){return (cur!=nil||reload())?*cur++:EOF;}
			};
			struct Output_Flush_Base{void putc(char ch){putchar(ch);}};
			template<size_t BUFSIZE>
			class Fast_Output_Flush_Base{
				char buf[BUFSIZE],*cur=buf;
			public:
				~Fast_Output_Flush_Base(){std::fwrite(buf,1,cur-buf,stdout);}
				void putc(char ch){*cur++=ch;}
			};
			template<size_t BUFSIZE>
			class Fast_Output_Flush_Safer{
				char buf[BUFSIZE],*cur=buf;
				bool freeze(){return likely(cur!=buf)&&(fwrite(buf,1,cur-buf,stdout),cur=buf);}
			public:
				~Fast_Output_Flush_Safer(){freeze();}
				void putc(char ch){cur-buf==BUFSIZE&&freeze(),*cur++=ch;}
			};
		}
		template<typename _Input_Flush=Flush::Input_Flush_Base>
		class InStream{
			static _Input_Flush Input;
		public:
			template<typename T>
			typename std::enable_if<std::is_integral<T>::value,InStream>::type&operator>>(T&x){
				x=0;bool sign=false;char Ch=Input.getc();
				for(;!isdigit(Ch);Ch=Input.getc()) if(Ch=='-') sign=true;
				for(;isdigit(Ch);Ch=Input.getc()) x=x*10+(sign?-(Ch&15):(Ch&15));
				return *this;
			}
			InStream&operator>>(char*str){
				while(isspace(*str=Input.getc()));
				while(!isspace(*++str=Input.getc()));
				return *str='\0',*this;
			}
			template<typename ...Args>
			InStream&read(Args&&...args){return std::initializer_list<InStream>{*this>>args...},*this;}
			template<typename T>
			T read(){
				static T x;
				return read(x),x;
			}
		};
		template<typename _Input_Flush>
		_Input_Flush InStream<_Input_Flush>::Input;
		template<typename _Output_Flush=Flush::Output_Flush_Base>
		class OutStream{
			static _Output_Flush Output;
		public:
			template<typename T>
			typename std::enable_if<std::is_integral<T>::value,OutStream>::type&operator<<(T x){
				static char sta[114];
				int top=0;
				if(x<0){
					Output.putc('-');
					do sta[top++]=(-(x%10))|48,x/=10;
					while(x);
				}
				else
					do sta[top++]=(x%10)|48,x/=10;
					while(x);
				while(top) Output.putc(sta[--top]);
				return *this;
			}
			OutStream&operator<<(char Ch){return Output.putc(Ch),*this;}
			OutStream&operator<<(const char*Str){while(*Str) Output.putc(*Str++);return *this;}
			OutStream&operator<<(char*Str){return *this<<(static_cast<const char*>(Str));}
			template<typename ...Args>
			OutStream&write(Args...args){return std::initializer_list<OutStream>{*this<<args...},*this;}
			template<typename ...Args>
			OutStream&writeln(Args...args){return write(args...),Output.putc('\n'),*this;}
		};
		template<typename _Output_Flush>
		_Output_Flush OutStream<_Output_Flush>::Output;
	}
	namespace ModTool{
		template<typename _Tp,_Tp mod,_Tp phi=mod-1>
		struct Moder{
			static_assert(std::is_integral<_Tp>::value,"Only integers can be modulus.");
			template<typename T>
			constexpr _Tp norm(T x)const{return x<0?x%mod+mod:x%mod;}
			template<typename T>
			constexpr _Tp unorm(T x)const{return x%mod;}
			template<typename T,typename...Args>
			constexpr void plus(T&x,Args...args)const{x=norm(x),void(std::initializer_list<T>{(x=unorm(x+norm(args)))...});}
			template<typename T,typename...Args>
			constexpr void mult(T&x,Args...args)const{x=norm(x),void(std::initializer_list<T>{(x=unorm(x*norm(args)))...});}
			template<typename...Args>
			constexpr _Tp sum(Args...args)const{
				_Tp ret{0};
				return plus(ret,args...),ret;
			}
			template<typename...Args>
			constexpr _Tp prod(Args...args)const{
				_Tp ret{1};
				return mult(ret,args...),ret;
			}
			template<typename T>
			constexpr _Tp qpow(_Tp x,T pw)const{
				_Tp ret{1};
				x=norm(x);
				for(;pw;pw>>=1,x=unorm(x*x)) if(pw&1) ret=unorm(ret*x);
				return ret;
			}
			constexpr _Tp inv(_Tp x)const{return qpow(x,phi-1);}
			template<size_t N>
			constexpr auto getFac(){
				std::array<_Tp,N> Fac{};
				Fac[0]=1;
				for(size_t i=1;i<N;++i) Fac[i]=unorm(Fac[i-1]*i);
				return Fac;
			}
			template<size_t N>
			constexpr auto getInv(_Tp Fac){
				std::array<_Tp,N> Inv{};
				Inv[N-1]=inv(Fac),Inv[0]=1;
				for(size_t i=N-2;i;--i) Inv[i]=unorm(Inv[i+1]*(i+1));
				return Inv;
			}
		};
	}
	namespace DS{
		namespace Sgt{
			enum SegmentTree_Type{Single=1,Interval=2};
			template<typename Info,SegmentTree_Type _Modify,SegmentTree_Type _Query,typename Vec=std::vector<Info>>
			class SegmentTree{};
			template<typename Info,typename Vec>
			class SegmentTree<Info,Interval,Interval,Vec>{
			private:
				int st,ed;
				Vec tr;
				void build(int p,int l,int r){
					tr[p]={};
					if(l==r) return tr[p].init(l);
					int mid=(l+r)>>1;
					build(p<<1,l,mid),build(p<<1|1,mid+1,r);
					tr[p].pull(tr[p<<1],tr[p<<1|1]);
				}
				void modify(int p,int l,int r,int L,int R,const Info&V){
					if(L<=l&&r<=R) return tr[p].get(V);
					int mid=(l+r)>>1;
					tr[p].push(tr[p<<1],tr[p<<1|1]);
					if(L<=mid) modify(p<<1,l,mid,L,R,V);
					if(R>mid) modify(p<<1|1,mid+1,r,L,R,V);
					tr[p].pull(tr[p<<1],tr[p<<1|1]);
				}
				Info query(int p,int l,int r,int L,int R){
					if(L<=l&&r<=R) return tr[p];
					int mid=(l+r)>>1;
					tr[p].push(tr[p<<1],tr[p<<1|1]);
					if(L<=mid&&R>mid) return merge(query(p<<1,l,mid,L,R),query(p<<1|1,mid+1,r,L,R));
					else return L<=mid?query(p<<1,l,mid,L,R):query(p<<1|1,mid+1,r,L,R);
				}
			public:
				SegmentTree():st{},ed{},tr{}{}
				SegmentTree(int _st,int _ed):st{_st},ed{_ed}{tr.resize((ed-st+1)<<2);}
				void build(){build(1,st,ed);}
				void resize(int _st,int _ed){st=_st,ed=_ed,tr.resize((ed-st+1)<<2);}
				void modify(int L,int R,const Info&V){modify(1,st,ed,L,R,V);}
				Info query(int L,int R){return query(1,st,ed,L,R);}
				void modify(int X,const Info&V){modify(1,st,ed,X,X,V);}
				Info query(int X){return query(1,st,ed,X,X);}
			};
		}
	}
	namespace NetFlow{
		template<typename _Cap,template<typename...> typename _Vec=std::vector>
		class Maxi_Flow{
			struct edge{int ver,nxt;_Cap cap;};
			_Vec<int> Head;
			_Vec<edge> Edge;
		public:
			using edge_type=edge;
			using edge_point=int;
			edge_point edgeEnd()const{return -1;}
			edge_point edgeRev(edge_point e)const{return e^1;}
			Maxi_Flow():Head{},Edge{},Dep{}{}
			Maxi_Flow(int n):Edge{}{Head.resize(n,-1),Dep.resize(n),Que.resize(n);}
			Maxi_Flow(int n,int m){Head.resize(n,-1),Edge.reserve(m<<1),Dep.resize(n),Que.resize(n);}
			void clear(){std::fill(Head.begin(),Head.end(),-1),Edge.clear();}
			void resize(int n){Head.clear(),Head.resize(n,-1),Dep.resize(n),Que.resize(n);}
			void resize(int n,int m){Head.clear(),Head.resize(n,-1),Edge.reserve(m<<1),Dep.resize(n),Que.resize(n);}
			edge_point add(int u,int v,_Cap c){return Edge.push_back({v,Head[u],c}),Head[u]=Edge.size()-1;}
			edge_point link(int u,int v,_Cap c){return add(v,u,0),add(u,v,c);}
			const edge_point&getHead(int u)const{return Head[u];}
			const edge_type&getEdge(edge_point e)const{return Edge[e];}
			edge_type&cgEdge(edge_point e){return Edge[e];}
		private:
			_Vec<int> Dep,Cur,Que;
			bool bfs(int s,int t){
				std::fill(Dep.begin(),Dep.end(),-1);
				Que.resize(Head.size());
				static int head,tail;
				Dep[Que[head=tail=0]=s]=0;
				for(int u;head<=tail;) for(int e=Head[u=Que[head++]];~e;e=Edge[e].nxt)
					if(Edge[e].cap&&!~Dep[Edge[e].ver]) Dep[Que[++tail]=Edge[e].ver]=Dep[u]+1;
				return Dep[t]!=-1;
			}
			_Cap dfs(int u,int t,_Cap flow){
				if(u==t) return flow;
				_Cap rest=flow;
				for(int&e=Cur[u];~e&&rest;e=Edge[e].nxt)
					if(Edge[e].cap&&Dep[Edge[e].ver]==Dep[u]+1){
						_Cap cap=dfs(Edge[e].ver,t,min(rest,Edge[e].cap));
						if(cap!=0) Edge[e].cap-=cap,Edge[edgeRev(e)].cap+=cap,rest-=cap;
						else Dep[Edge[e].ver]=-1;
					}
				return flow-rest;
			}
		public:
			void output(){for(auto i=0u;i<Head.size();++i) for(int e=Head[i];~e;e=Edge[e].nxt) if(Edge[e].cap) printf("%d %d %d\n",i,Edge[e].ver,Edge[e].cap);}
			_Cap flow(int s,int t,_Cap limit=Inf<_Cap>){
				_Cap flow{};
				while(limit&&bfs(s,t)) for(Cur=Head;_Cap cap=dfs(s,t,limit);) flow+=cap,limit-=cap;
				return flow;
			}
		};
		template<typename _Cap,typename _Cost,template<typename...> typename _Vec=std::vector,template<typename...> typename _Que=std::queue>
		class Mini_Cost_Maxi_Flow{
			struct edge{int ver,nxt;_Cap cap;_Cost cost;};
			_Vec<int> Head;
			_Vec<edge> Edge;
		public:
			using edge_type=edge;
			using edge_point=int;
			edge_point edgeEnd()const{return -1;}
			edge_point edgeRev(edge_point e)const{return e^1;}
			Mini_Cost_Maxi_Flow():Head{},Edge{}{}
			Mini_Cost_Maxi_Flow(int n):Edge{}{Head.resize(n,-1),Dis.resize(n),Inq.resize(n);}
			Mini_Cost_Maxi_Flow(int n,int m){Head.resize(n,-1),Edge.reserve(m<<1),Dis.resize(n),Inq.resize(n);}
			void clear(){std::fill(Head.begin(),Head.end(),-1),Edge.clear();}
			void resize(int n){Head.clear(),Head.resize(n,-1),Dis.resize(n),Inq.resize(n);}
			void resize(int n,int m){Head.clear(),Head.resize(n,-1),Edge.reserve(m<<1),Dis.resize(n),Inq.resize(n);}
			edge_point add(int u,int v,_Cap c,_Cost w){return Edge.push_back({v,Head[u],c,w}),Head[u]=Edge.size()-1;}
			edge_point link(int u,int v,_Cap c,_Cost w){return add(v,u,0,-w),add(u,v,c,w);}
			const edge_point&getHead(int u)const{return Head[u];}
			const edge_type&getEdge(edge_point e)const{return Edge[e];}
		private:
			_Vec<int> Cur,Inq;
			_Vec<_Cost> Dis;
			bool spfa(int s,int t){
				std::fill(Dis.begin(),Dis.end(),Inf<_Cost>);
				std::fill(Inq.begin(),Inq.end(),0);
				static _Que<int> q;
				q.emplace(s),Dis[s]=0,Inq[s]=1;
				for(int u;!q.empty();){
					Inq[u=q.front()]=0,q.pop();
					for(int e=Head[u];~e;e=Edge[e].nxt)
						if(Edge[e].cap&&Dis[Edge[e].ver]>Dis[u]+Edge[e].cost)
							if(Dis[Edge[e].ver]=Dis[u]+Edge[e].cost,!Inq[Edge[e].ver]) q.emplace(Edge[e].ver),Inq[Edge[e].ver]=1;
				}
				return Dis[t]!=Inf<_Cost>;
			}
			_Cap dfs(int u,int t,_Cap flow){
				if(u==t) return flow;
				_Cap rest=flow;
				Inq[u]=1;
				for(int&e=Cur[u];~e&&rest;e=Edge[e].nxt)
					if(Edge[e].cap&&!Inq[Edge[e].ver]&&Dis[Edge[e].ver]==Dis[u]+Edge[e].cost){
						_Cap cap=dfs(Edge[e].ver,t,min(rest,Edge[e].cap));
						if(cap!=0) Edge[e].cap-=cap,Edge[edgeRev(e)].cap+=cap,rest-=cap;
						else Dis[Edge[e].ver]=Inf<_Cost>;
					}
				Inq[0]=1;
				return flow-rest;
			}
		public:
			void output(){for(auto i=0u;i<Head.size();++i) for(int e=Head[i];~e;e=Edge[e].nxt) if(Edge[e].cap) printf("%d %d %d\n",i,Edge[e].ver,Edge[e].cap);}
			std::pair<_Cap,_Cost> flow(int s,int t,_Cap limit=Inf<_Cap>){
				_Cap flow{};
				_Cost cost{};
				while(limit&&spfa(s,t)) for(Cur=Head;_Cap cap=dfs(s,t,limit);) flow+=cap,limit-=cap,cost+=cap*Dis[t];
				return {flow,cost};
			}
		};
	}
	namespace Mat{
		template<typename T>
		class Matrix{
		protected:
			int n,m;
			int**v;
			void Alloca(){
				if(n>0&&m>0){
					v=new int*[n]{};
					for(int i=0;i<n;++i) v[i]=new int[m]{};
				}
				else v=nullptr,n=m=0;
			}
			void Freeze(){
				if(n>0&&m>0){
					for(int i=0;i<n;++i) delete[] v[i];
					delete[] v;
				}
				v=nullptr,n=m=0;
			}
			void clone(int**p){for(int i=0;i<n;++i) for(int j=0;j<m;++j) v[i][j]=p[i][j];}
		public:
			int row()const{return n;}
			int col()const{return m;}
			Matrix():n{},m{},v{}{}
			Matrix(int _n,int _m):n{_n},m{_m},v{}{Alloca();}
			Matrix(int _n):n{_n},m{_n},v{}{Alloca(),init();}
			Matrix(const Matrix&it):n{it.n},m{it.m}{Alloca(),clone(it.v);}
			Matrix(Matrix&&it):Matrix{}{swap(n,it.n),swap(m,it.m),swap(v,it.v);}
			Matrix&operator=(const Matrix&it){return resize(it.n,it.m),clone(it.v),*this;}
			Matrix&operator=(Matrix&&it){return swap(n,it.n),swap(m,it.m),swap(v,it.v),*this;}
			void resize(int _n,int _m,int _v={}){
				Freeze(),n=_n,m=_m,Alloca();
				for(int i=0;i<n;++i) for(int j=0;j<m;++j) v[i][j]=_v;
			}
			T*operator[](int x){return v[x];}
			const T*operator[](int x)const{return v[x];}
			void init(){for(int i=0;i<n;++i) (*this)[i][i]=1;}
			~Matrix(){Freeze();}
			template<typename U>
			operator Matrix<U>()const{
				Matrix<U> ret(n,m);
				return ret.Alloca(),ret.clone(v),ret;
			}
		};
		template<typename Flush,typename T>
		IO::OutStream<Flush>&operator<<(IO::OutStream<Flush>&os,const Matrix<T>&it){
			for(int i=0;i<it.row();++i,os<<'\n') for(int j=0;j<it.col();++j) os<<it[i][j]<<' ';
			return os;
		}
	}
}
using namespace Default_Source;

/**
*/

constexpr int N=200;

IO::InStream<> Input;
IO::OutStream<> Output;

int n,a[N+1][N+1];
std::pair<int,int> id[N+1][N+1];
template<typename Flush>
IO::OutStream<Flush>&operator<<(IO::OutStream<Flush>&os,std::pair<int,int> p){return os<<p.first<<' '<<p.second;}
void print(){
	Output.writeln(n*(n-1)>>1);
	for(int i=1;i<=n;++i) for(int j=1;j<i;++j)
		Output<<id[i][j]<<' '<<id[j][i]<<'\n';
}
NetFlow::Maxi_Flow<int> G;

signed main(){

	for(int Test=Input.read<int>();Test;--Test){
		Input.read(n);
		for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) Input.read(a[i][j]),id[i][j]={i,j};
		int s=0,t=(n<<1)+1;
		G.resize(t+1);
		for(int T=1;T<=n;++T){
			G.clear();
			for(int i=1;i<=n;++i) G.link(s,i,1),G.link(i+n,t,1);
			static int c[N+1][N+1];
			__builtin_memset(c,0,sizeof(c));
			for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) if(!c[i][a[i][j]]) c[i][a[i][j]]=j,G.link(i,a[i][j]+n,1);
			// G.output();
			// Output.writeln();
			if(G.flow(s,t)!=n) return 0;
			for(int i=1;i<=n;++i) for(int e=G.getHead(i);e!=G.edgeEnd();e=G.getEdge(e).nxt)
				if(!G.getEdge(e).cap){
					int k=c[i][G.getEdge(e).ver-n];
					swap(id[i][k],id[i][T]),swap(a[i][k],a[i][T]);
				}
		}
		print();
	}

	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 20
Accepted

Test #1:

score: 20
Accepted
time: 4ms
memory: 4188kb

input:

7
132
96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 ...

output:

8646
2 132 1 1
3 132 1 2
3 1 2 2
4 132 1 3
4 1 2 3
4 2 3 3
5 132 1 4
5 1 2 4
5 2 3 4
5 3 4 4
6 132 1 5
6 1 2 5
6 2 3 5
6 3 4 5
6 4 5 5
7 132 1 6
7 1 2 6
7 2 3 6
7 3 4 6
7 4 5 6
7 5 6 6
8 132 1 7
8 1 2 7
8 2 3 7
8 3 4 7
8 4 5 7
8 5 6 7
8 6 7 7
9 132 1 8
9 1 2 8
9 2 3 8
9 3 4 8
9 4 5 8
9 5 6 8
9 6 7 8...

result:

ok your solution is correct.

Test #2:

score: 0
Accepted
time: 0ms
memory: 3968kb

input:

8
14
13 13 13 13 13 13 13 13 13 13 13 13 13 13
7 7 7 7 7 7 7 7 7 7 7 7 7 7
8 8 8 8 8 8 8 8 8 8 8 8 8 8
14 14 14 14 14 14 14 14 14 14 14 14 14 14
5 5 5 5 5 5 5 5 5 5 5 5 5 5
4 4 4 4 4 4 4 4 4 4 4 4 4 4
1 1 1 1 1 1 1 1 1 1 1 1 1 1
10 10 10 10 10 10 10 10 10 10 10 10 10 10
2 2 2 2 2 2 2 2 2 2 2 2 2 2
9...

output:

91
2 14 1 1
3 14 1 2
3 1 2 2
4 14 1 3
4 1 2 3
4 2 3 3
5 14 1 4
5 1 2 4
5 2 3 4
5 3 4 4
6 14 1 5
6 1 2 5
6 2 3 5
6 3 4 5
6 4 5 5
7 14 1 6
7 1 2 6
7 2 3 6
7 3 4 6
7 4 5 6
7 5 6 6
8 14 1 7
8 1 2 7
8 2 3 7
8 3 4 7
8 4 5 7
8 5 6 7
8 6 7 7
9 14 1 8
9 1 2 8
9 2 3 8
9 3 4 8
9 4 5 8
9 5 6 8
9 6 7 8
9 7 8 8
1...

result:

ok your solution is correct.

Test #3:

score: 0
Accepted
time: 3ms
memory: 4084kb

input:

4
82
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1...

output:

3321
2 82 1 1
3 82 1 2
3 1 2 2
4 82 1 3
4 1 2 3
4 2 3 3
5 82 1 4
5 1 2 4
5 2 3 4
5 3 4 4
6 82 1 5
6 1 2 5
6 2 3 5
6 3 4 5
6 4 5 5
7 82 1 6
7 1 2 6
7 2 3 6
7 3 4 6
7 4 5 6
7 5 6 6
8 82 1 7
8 1 2 7
8 2 3 7
8 3 4 7
8 4 5 7
8 5 6 7
8 6 7 7
9 82 1 8
9 1 2 8
9 2 3 8
9 3 4 8
9 4 5 8
9 5 6 8
9 6 7 8
9 7 8 8...

result:

ok your solution is correct.

Test #4:

score: 0
Accepted
time: 7ms
memory: 4296kb

input:

8
3
1 1 1
3 3 3
2 2 2
3
1 1 1
3 3 3
2 2 2
1
1
11
5 5 5 5 5 5 5 5 5 5 5
3 3 3 3 3 3 3 3 3 3 3
1 1 1 1 1 1 1 1 1 1 1
9 9 9 9 9 9 9 9 9 9 9
4 4 4 4 4 4 4 4 4 4 4
11 11 11 11 11 11 11 11 11 11 11
2 2 2 2 2 2 2 2 2 2 2
6 6 6 6 6 6 6 6 6 6 6
8 8 8 8 8 8 8 8 8 8 8
10 10 10 10 10 10 10 10 10 10 10
7 7 7 7 7...

output:

3
2 3 1 1
3 3 1 2
3 1 2 2
3
2 3 1 1
3 3 1 2
3 1 2 2
0
55
2 11 1 1
3 11 1 2
3 1 2 2
4 11 1 3
4 1 2 3
4 2 3 3
5 11 1 4
5 1 2 4
5 2 3 4
5 3 4 4
6 11 1 5
6 1 2 5
6 2 3 5
6 3 4 5
6 4 5 5
7 11 1 6
7 1 2 6
7 2 3 6
7 3 4 6
7 4 5 6
7 5 6 6
8 11 1 7
8 1 2 7
8 2 3 7
8 3 4 7
8 4 5 7
8 5 6 7
8 6 7 7
9 11 1 8
9 1...

result:

ok your solution is correct.

Subtask #2:

score: 20
Accepted

Dependency #1:

100%
Accepted

Test #5:

score: 20
Accepted
time: 5ms
memory: 4180kb

input:

5
17
9 9 9 9 9 9 9 9 9 9 9 9 9 2 9 9 9
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6
2 2 2 2 2 2 2 2 2 2 2 2 11 2 2 2 2
4 4 4 4 4 4 10 4 4 4 4 4 4 4 4 4 4
10 10 10 10 10 10 8 10 10 10 10 10 10 10 10 10 10
12 12 12 12 12 12 12 12 12 12 12 12 14 12 12 12 12
14 14 14 14 14 14 14 14 14 14 14 12 14 14 14 14 14
16 16...

output:

136
2 17 1 17
3 13 1 2
3 17 2 2
4 7 1 3
4 17 2 3
4 2 3 3
5 7 1 4
5 17 2 4
5 2 3 4
5 3 4 4
6 13 1 5
6 17 2 5
6 2 3 5
6 3 4 5
6 4 5 5
7 12 1 6
7 17 2 6
7 2 3 6
7 3 4 6
7 4 5 6
7 5 6 6
8 3 1 7
8 17 2 7
8 2 3 7
8 1 4 1
8 4 5 1
8 5 6 7
8 6 7 7
9 2 1 8
9 17 2 8
9 1 3 8
9 3 4 8
9 4 5 8
9 5 6 8
9 6 7 8
9 7 ...

result:

ok your solution is correct.

Test #6:

score: 0
Accepted
time: 4ms
memory: 4132kb

input:

9
1
1
28
2 2 2 2 5 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
7 24 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 8 13 13 13
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 16 8 8 8 8 8 8 8 8 8 8 8 8
17 24 24 24 24 24 24 24 24 24 24 24 24...

output:

0
378
2 2 1 28
3 25 1 2
3 28 2 1
4 16 1 3
4 28 2 3
4 2 3 3
5 1 1 4
5 28 2 4
5 2 3 4
5 3 4 4
6 9 1 1
6 28 2 5
6 2 3 5
6 3 4 5
6 4 5 5
7 1 1 6
7 28 2 6
7 2 3 6
7 3 4 6
7 4 5 6
7 5 6 6
8 11 1 7
8 28 2 7
8 2 3 7
8 3 4 7
8 4 5 7
8 5 6 7
8 6 7 7
9 3 1 8
9 28 2 8
9 2 3 8
9 1 4 8
9 4 5 8
9 5 6 8
9 6 7 8
9 7...

result:

ok your solution is correct.

Test #7:

score: 0
Accepted
time: 4ms
memory: 4096kb

input:

9
22
19 19 19 19 19 19 19 19 19 10 19 19 19 19 19 19 19 19 19 19 19 19
17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 8
21 21 21 21 21 21 21 21 5 21 21 21 21 21 21 21 21 21 21 21 21 21
12 12 12 12 12 12 12 22 12 12 12 12 12 12 12 12 12 12 12 12 12 12
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3...

output:

231
2 22 1 22
3 9 1 2
3 22 2 2
4 8 1 3
4 22 2 3
4 2 3 3
5 21 1 4
5 22 2 4
5 2 3 4
5 3 4 4
6 3 1 5
6 22 2 5
6 2 3 5
6 1 4 5
6 4 5 5
7 2 1 6
7 22 2 6
7 1 3 6
7 3 4 6
7 4 5 6
7 5 6 6
8 21 1 7
8 22 2 7
8 2 3 7
8 3 4 7
8 4 5 7
8 5 6 7
8 6 7 7
9 22 1 8
9 1 2 8
9 2 3 8
9 3 4 1
9 4 5 8
9 5 6 8
9 6 7 8
9 7 8...

result:

ok your solution is correct.

Test #8:

score: 0
Accepted
time: 3ms
memory: 4000kb

input:

8
29
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 6 3 3 3 3
11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 3 11 11 11 11 11 11 11 11
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 23 1 1 1 1 1 1 1
20 20 20 20 20 20 20 20 20 20 20 25 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26 26...

output:

406
2 21 1 29
3 22 1 2
3 29 2 2
4 12 1 3
4 29 2 3
4 2 3 3
5 20 1 4
5 29 2 4
5 2 3 4
5 3 4 4
6 7 1 5
6 29 2 5
6 2 3 5
6 3 4 5
6 4 5 5
7 11 1 6
7 29 2 6
7 2 3 6
7 3 4 6
7 4 5 6
7 5 6 6
8 9 1 7
8 29 2 7
8 2 3 7
8 3 4 7
8 4 5 7
8 5 6 1
8 6 7 7
9 29 1 8
9 1 2 8
9 2 3 8
9 3 4 8
9 4 5 8
9 5 6 8
9 6 7 8
9 7...

result:

ok your solution is correct.

Subtask #3:

score: 0
Wrong Answer

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Test #9:

score: 0
Wrong Answer
time: 2ms
memory: 3920kb

input:

19
1
1
2
1 2
1 2
3
1 3 2
2 3 1
2 1 3
4
1 4 3 4
3 2 2 1
3 1 2 3
4 4 1 2
5
4 2 1 5 4
4 5 4 4 1
5 3 2 3 2
3 1 3 2 1
3 1 2 5 5
6
6 2 2 1 6 6
2 5 5 3 4 6
1 2 4 2 6 1
4 4 1 4 5 1
1 2 6 5 3 5
5 3 3 3 3 4
7
5 2 3 6 4 2 7
2 1 6 1 1 5 2
1 6 7 7 5 1 2
6 6 3 4 4 7 1
3 6 5 7 3 2 7
3 2 5 1 4 5 4
5 3 3 7 4 4 6
8
1...

output:

0
1
2 2 1 2
3
2 3 1 1
3 3 1 2
3 1 2 1
6
2 2 1 2
3 2 1 4
3 1 2 3
4 4 1 3
4 3 2 4
4 1 3 3
10
2 5 1 4
3 2 1 2
3 3 2 1
4 4 1 5
4 2 2 3
4 5 3 5
5 4 1 3
5 1 2 4
5 2 3 1
5 5 4 1
15
2 1 1 5
3 5 1 6
3 2 2 6
4 5 1 1
4 2 2 5
4 4 3 1
5 5 1 2
5 1 2 3
5 4 3 6
5 2 4 6
6 6 1 3
6 1 2 2
6 2 3 3
6 3 4 3
6 4 5 3
21
2 3...

result:

wrong answer exist a kind of card which a person don't hold.