description: Given a positive integer n. Find three distinct positive integers a, b, c such that a + b + c = n and \operatorname{gcd}(a, b) = c, where \operatorname{gcd}(x, y) denotes the [greatest common divisor (GCD)](https://en.wikipedia.org/wiki/Greatest_common_divisor) of integers x and y.
  
  Input
  
  The input consists of multiple test cases. The first line contains a single integer t (1 ≤ t ≤ 10^5) — the number of test cases. Description of the test cases follows.
  
  The first and only line of each test case contains a single integer n (10 ≤ n ≤ 10^9).
  
  Output
  
  For each test case, output three distinct positive integers a, b, c satisfying the requirements. If there are multiple solutions, you can print any. We can show that an answer always exists.
  
  Example
  
  Input
  
  
  6
  18
  63
  73
  91
  438
  122690412
  
  
  Output
  
  
  6 9 3
  21 39 3
  29 43 1
  49 35 7
  146 219 73
  28622 122661788 2
  
  Note
  
  In the first test case, 6 + 9 + 3 = 18 and \operatorname{gcd}(6, 9) = 3.
  
  In the second test case, 21 + 39 + 3 = 63 and \operatorname{gcd}(21, 39) = 3.
  
  In the third test case, 29 + 43 + 1 = 73 and \operatorname{gcd}(29, 43) = 1.
solution: import java.util.*;
  import java.io.*;
  public class Hiking {
  	static PrintWriter pw = new PrintWriter(System.out);
  	static Scanner sc = new Scanner(System.in);
  	static long Pow(long a, long e, long mod) // O(log e)
  	{
  		a %= mod;
  		long res = 1l;
  		while (e > 0) {
  			if ((e & 1) == 1)
  				res = (res * a) % mod;
  			a = (a * a) % mod;
  			e >>= 1l;
  		}
  		return res;
  	}
  
  	public static boolean composite(int n, long a, long d, long s) {
  		long x = Pow(a, d, n);
  		if (x == 1 || x == n - 1)
  			return false;
  		for (int i = 1; i < s; i++) {
  			x = x * x % n;
  			if (x == n - 1)
  				return false;
  		}
  		return true;
  	}
  
  	public static boolean isprime(int n) {
  		if (n < 2)
  			return false;
  		int r = 0;
  		long d = n - 1;
  		while ((d & 1) == 0) {
  			d >>= 1;
  			r++;
  		}
  
  		for (int a : new int[] { 2, 3, 5, 7 }) {
  			if (n == a)
  				return true;
  			if (composite(n, a, d, r))
  				return false;
  		}
  		return true;
  	}
  	public static long GCD(long a, long b) {
  		if (b == 0)
  			return a;
  		if (a == 0)
  			return b;
  		return (a > b) ? GCD(a % b, b) : GCD(a, b % a);
  	}
  	public static void main(String [] args) throws IOException, InterruptedException {
  	   int t=sc.nextInt();
  	   while(t-->0) {
  		  int n=sc.nextInt();
  		  if(n%2==0) {
  			  pw.println(2+" "+(n-3)+" "+1 );
  		  }
  		  else {
  			  int x=-1;
  			  for(int i=n-3;i>=0;i--) {
  				  if(isprime(i)) {
  					  x=i;
  					  break;
  				  }
  			  }
  			  int y=-1;
  			  for(int i=2;i<x;i++) {
  				  if(GCD(x, i)==1 && i+x==n-1) {
  					  y=i;break;
  				  }
  			  }
  			  pw.println(x+" "+y+" "+1);
  		  }
  	   }
  
  
  		pw.flush();
  	}
  	static class pair implements Comparable<pair> {
  		int x;
  		int y;
  
  		public pair(int x, int y) {
  			this.x = x;
  			this.y = y;
  		}
  
  		public String toString() {
  			return x + " " + y;
  		}
  
  		public boolean equals(Object o) {
  			if (o instanceof pair) {
  				pair p = (pair) o;
  				return p.x == x && p.y == y;
  			}
  			return false;
  		}
  
  		public int hashCode() {
  			return new Integer(x).hashCode() * 31 + new Integer(y).hashCode();
  		}
  
  		public int compareTo(pair other) {
  			if (this.x == other.x) {
  				return Long.compare(this.y, other.y);
  			}
  			return Long.compare(this.x, other.x);
  		}
  	}
  
  
  	static class tuble implements Comparable<tuble> {
  		int x;
  		int y;
  		int z;
  
  		public tuble(int x, int y, int z) {
  			this.x = x;
  			this.y = y;
  			this.z = z;
  		}
  
  		public String toString() {
  			return x + " " + y + " " + z;
  		}
  
  		public int compareTo(tuble other) {
  			if (this.x == other.x) {
  				if (this.y == other.y) {
  					return this.z - other.z;
  				}
  				return this.y - other.y;
  			} else {
  				return this.x - other.x;
  			}
  		}
  	}
  
  	static class Scanner {
  		StringTokenizer st;
  		BufferedReader br;
  
  		public Scanner(InputStream s) {
  			br = new BufferedReader(new InputStreamReader(s));
  		}
  
  		public Scanner(String file) throws IOException {
  			br = new BufferedReader(new FileReader(file));
  		}
  
  		public Scanner(FileReader r) {
  			br = new BufferedReader(r);
  		}
  
  		public String next() throws IOException {
  			while (st == null || !st.hasMoreTokens())
  				st = new StringTokenizer(br.readLine());
  			return st.nextToken();
  		}
  
  		public String readAllLines(BufferedReader reader) throws IOException {
  			StringBuilder content = new StringBuilder();
  			String line;
  
  			while ((line = reader.readLine()) != null) {
  				content.append(line);
  				content.append(System.lineSeparator());
  			}
  
  			return content.toString();
  		}
  
  		public int nextInt() throws IOException {
  			return Integer.parseInt(next());
  		}
  
  		public long nextLong() throws IOException {
  			return Long.parseLong(next());
  		}
  
  		public String nextLine() throws IOException {
  			return br.readLine();
  		}
  
  		public double nextDouble() throws IOException {
  			String x = next();
  			StringBuilder sb = new StringBuilder("0");
  			double res = 0, f = 1;
  			boolean dec = false, neg = false;
  			int start = 0;
  			if (x.charAt(0) == '-') {
  				neg = true;
  				start++;
  			}
  			for (int i = start; i < x.length(); i++)
  				if (x.charAt(i) == '.') {
  					res = Long.parseLong(sb.toString());
  					sb = new StringBuilder("0");
  					dec = true;
  				} else {
  					sb.append(x.charAt(i));
  					if (dec)
  						f *= 10;
  				}
  			res += Long.parseLong(sb.toString()) / f;
  			return res * (neg ? -1 : 1);
  		}
  
  		public long[] nextlongArray(int n) throws IOException {
  			long[] a = new long[n];
  			for (int i = 0; i < n; i++)
  				a[i] = nextLong();
  			return a;
  		}
  
  		public Long[] nextLongArray(int n) throws IOException {
  			Long[] a = new Long[n];
  			for (int i = 0; i < n; i++)
  				a[i] = nextLong();
  			return a;
  		}
  
  		public int[] nextIntArray(int n) throws IOException {
  			int[] a = new int[n];
  			for (int i = 0; i < n; i++)
  				a[i] = nextInt();
  			return a;
  		}
  
  		public Integer[] nextIntegerArray(int n) throws IOException {
  			Integer[] a = new Integer[n];
  			for (int i = 0; i < n; i++)
  				a[i] = nextInt();
  			return a;
  		}
  
  		public boolean ready() throws IOException {
  			return br.ready();
  		}
  
  	}
  
  }