import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.NoSuchElementException; public class Main { public static void main(String[] args) { new Main().run(); } long pow(long a, long n) { return n!=0?pow(a*a%p,n/2)*(n%2==1?a:1)%p : 1; } long inv(long a) { return pow(a,p-2); } class Pair { long u, v; public Pair(long u, long v) { this.u=u; this.v=v; } @Override public String toString() { return "1 "+(u+1)+" "+(v+1); } } void add(ArrayList ans, long[] A, int i, int j) { A[i]=(A[i]+A[j])%p; ans.add(new Pair(i, j)); } // A[t] == B[t] に 18*2 step でする。 void solve2(ArrayList ans, long[] A, long[] B, int s, int t) { long a=A[t], a2=A[s]; long b=B[t]; assert(a!=0 && A[s]==B[s]); long x; if (a==0) x=p; else { long c=a2*inv(a)%p; x=inv(c)*(b*inv(a)%p+p-pow(2,17))%p; } for (int shift=17;shift>=0;--shift) { if ((x>>shift)%2==1) add(ans, A, t, s); if (shift>0) add(ans, A, t, t); } assert(A[t]==B[t]); } final long p=223577; void run() { FastScanner sc = new FastScanner(); int N=sc.nextInt(); sc.nextLong(); long[] A=new long[N]; long[] B=new long[N]; for (int i=0;ix==0); boolean zb=Arrays.stream(B).allMatch(x->x==0); if (za||zb) { if (za) { System.out.println(zb?0:-1); } else { System.out.println(za?0:-1); } } else if (N==1) { long a=A[0],b=B[0]; for (int i=0;i ans=new ArrayList(); int sqrtp=(int)Math.ceil(Math.sqrt(p)); if (N>2*sqrtp) { int s0=N-1; while (A[s0]==0) --s0; if (s0<2*sqrtp) { add(ans,A,2*sqrtp,s0); s0=2*sqrtp; } for (int shift=0;shift<=17;++shift) { for (int i=0;i=sqrtp) { add(ans, A, i, sqrtp-1+(int)(diff/sqrtp)); } diff %= sqrtp; if (diff>0) add(ans, A, i, (int)diff-1); assert(A[i]==B[i]); } } int s1=0; int s0=0; while (A[s0]==0) ++s0; while (B[s1]==0) ++s1; if (s0==s1) { int ns0=(s0+1)%N; if (A[ns0]==0) add(ans, A, ns0, s0); s0=ns0; } assert(A[s0]>0 && B[s1]>0 && s0 != s1); for (int shift=0;shift<=17;++shift) { for (int i=0;i Integer.MAX_VALUE) throw new NumberFormatException(); return (int) nl; } public double nextDouble() { return Double.parseDouble(next()); } }