""" https://yukicoder.me/problems/no/1837 Aを3の倍数 Bを1 mod 3 とする あとは総和を合わせないと… Aに対して +1,+1,+1,+1,+1,0,-2,-2,-2,-2,-2 でバランスを取れるか… +1,+1,-2 でセットなので… とりあえず 1000以上くらいの数字だけでA,Bを構築 あと、小さい要素を1 or 2個ずつ加えないといけない 1個はまじで困る →4個にする 2個を考えたい 1,4 , 999,1002,1008 2,3 , 1000,1003,1006 あー +1 が増えちゃう!! → 0,-1 で総裁 ===答えを見た=== 気合で頑張るのが正攻法 とりあえず Aは全部 0 mod 3 Bは全部 1 mod 3 ここまではok 適当に構成したら、数字が合うように3を足していけばok ・N = 0 mod 3 の時 そのままでok ・N = 1 mod 3 の時 Aを1個 mod 1 にすればok ・N = 2 mod 3 の時 Aを2個 mod 1 にする。 この時, この2個の数字の和が Bのmin2個の和より小さければok """ import sys from sys import stdin def is_ok(A,B): assert sum(A) == sum(B) sa = set() for i in A: for j in A: sa.add(i+j) sb = set() for i in B: for j in B: sb.add(i+j) return sa & sb N = int(stdin.readline()) if N % 3 == 0: btype = [-2] * (N//3) + [1] * (2*N//3) A = [3*(i+1) for i in range(N)] B = [A[i]+btype[i] for i in range(N)] print (" ".join(map(str,A))) print (" ".join(map(str,B))) print (is_ok(A,B) , file=sys.stderr) elif N % 3 == 1: btype = [-2] * (N//3) + [1] * (N - N//3) A = [3*(i+1) for i in range(N)] B = [A[i]+btype[i] for i in range(N)] A[-1] += 7 B[-1] += 3 B[-2] += 3 print (" ".join(map(str,A))) print (" ".join(map(str,B))) print (is_ok(A,B) , file=sys.stderr) else: M = N-2 btype = [-2] * (M//3) + [1] * (2*M//3) A = [3*(i+10) for i in range(M)] B = [A[i]+btype[i] for i in range(M)] A.append(1) A.append(4) B.append(B[-1] + 3) B.append(B[-1] + 3) Asum = sum(A) Bsum = sum(B) if Asum >= Bsum: B[-1] += Asum - Bsum else: rem = Bsum - Asum while rem > 0: for j in range(len(A)-1,1,-1): A[j] += 3 rem -= 3 if rem <= 0: break #print (B[-1],A[-1]) assert max(A) <= 10000 assert max(B) <= 10000 print (" ".join(map(str,A))) print (" ".join(map(str,B))) #print (is_ok(A,B) , file=sys.stderr)