description: Theofanis has a riddle for you and if you manage to solve it, he will give you a Cypriot snack halloumi for free (Cypriot cheese).
  
  You are given an integer n. You need to find two integers l and r such that -10^{18} ≤ l < r ≤ 10^{18} and l + (l + 1) + … + (r - 1) + r = n.
  
  Input
  
  The first line contains a single integer t (1 ≤ t ≤ 10^4) — the number of test cases.
  
  The first and only line of each test case contains a single integer n (1 ≤ n ≤ 10^{18}).
  
  Output
  
  For each test case, print the two integers l and r such that -10^{18} ≤ l < r ≤ 10^{18} and l + (l + 1) + … + (r - 1) + r = n. 
  
  It can be proven that an answer always exists. If there are multiple answers, print any.
  
  Example
  
  Input
  
  
  7
  1
  2
  3
  6
  100
  25
  3000000000000
  
  
  Output
  
  
  0 1
  -1 2 
  1 2 
  1 3 
  18 22
  -2 7
  999999999999 1000000000001
  
  Note
  
  In the first test case, 0 + 1 = 1.
  
  In the second test case, (-1) + 0 + 1 + 2 = 2.
  
  In the fourth test case, 1 + 2 + 3 = 6.
  
  In the fifth test case, 18 + 19 + 20 + 21 + 22 = 100.
  
  In the sixth test case, (-2) + (-1) + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 = 25.
solution: import java.util.*;
  import java.lang.*;
  import java.io.*;
  /* Name of the class has to be "Main" only if the class is public. */
  public class d2
  {
  	
  	//static ArrayList<ArrayList<Integer>> graph;
  	//static boolean[] visited;
  	//static int[] distance;
  	public static void main (String[] args) throws java.lang.Exception
  	{
  		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  		StringTokenizer st = new StringTokenizer(br.readLine());
  		int t = Integer.parseInt(st.nextToken());
  		outer : while(t-->0){
  			st = new StringTokenizer(br.readLine());
  			long a = Long.parseLong(st.nextToken());
  			long low = (-a+1);
  			System.out.println(low+" "+a);
  		}
  	}
  		static long gcd(long a,long b){
  			return (b == 0L) ? a : gcd(b,a%b);
  		}
  }
  /*	static void bfs(int vertex,int des,int dist){
  		ArrayDeque<Integer> queue = new ArrayDeque<>();
  		queue.add(vertex);
  		while(!queue.isEmpty()){
            int current = queue.pollFirst();
  		  visited[current] = true;
  		 // System.out.println(current+1);
  		 dist++;
  		  ArrayList<Integer> demo = new ArrayList<>();
  		  for(int v : graph.get(current)){
                 if(!visited[v]){
  				   queue.add(v);
  				   demo.add(v);
  				   if(des == v){
  					   System.out.println("distance = "+dist);
  				   }
  			   }
  		  }
  		  for(int i=0;i<demo.size();i++){
  			  System.out.print((demo.get(i)+1)+" ");
  		  }
  		  if(demo.size() != 0){
  			  System.out.println();
  		  }
  		}
  	}
  	static int gcd(int a,int b){
  		int k = Math.max(a,b);
  		int k1 = Math.min(a,b);
  		return (k1 == 0) ? k : gcd(k1,k%k1);
  	}*/
  