import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.StringTokenizer;







public class Main{
	public static int n;
	public static boolean[] vis;
	public static int[] nums;
	public static void main(String[] args) throws IOException, InterruptedException {
		
		Scanner sc = new Scanner(System.in);
		PrintWriter out = new PrintWriter(System.out);
		int n = sc.nextInt();
		int d = sc.nextInt();
		int[][] a = new int[n][d];
		
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < d; j++) {
				a[i][j] = sc.nextInt(); 
			}
		}
		int ans = 0;
		for (int i = 0; i < n; i++) {
			for (int j = i+1; j < n; j++) {
				int sum= 0;
				for (int j2 = 0; j2 < d; j2++) {
					sum+= (a[j][j2]-a[i][j2])*(a[j][j2]-a[i][j2]);
				}
				if (Math.sqrt(sum) == Math.ceil(Math.sqrt(sum))) {
					ans++;
				}
			}
		}
		out.println(ans);
		out.flush();

	}


	
	

	
}
class Scanner {
	StringTokenizer st;
	BufferedReader br;

	public Scanner(InputStream system) {
		br = new BufferedReader(new InputStreamReader(system));
	}

	public String next() throws IOException {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine());
		return st.nextToken();
	}

	public String nextLine() throws IOException {
		return br.readLine();
	}

	public int nextInt() throws IOException {
		return Integer.parseInt(next());
	}

	public double nextDouble() throws IOException {
		return Double.parseDouble(next());
	}

	public char nextChar() throws IOException {
		return next().charAt(0);
	}

	public Long nextLong() throws IOException {
		return Long.parseLong(next());
	}

	public boolean ready() throws IOException {
		return br.ready();
	}

	public void waitForInput() throws InterruptedException {
		Thread.sleep(3000);
	}


} import java.io.BufferedReader; BufferedReader java.io import java.io.IOException; IOException java.io import java.io.InputStream; InputStream java.io import java.io.InputStreamReader; InputStreamReader java.io import java.io.PrintWriter; PrintWriter java.io import java.util.StringTokenizer; StringTokenizer java.util public class Main{
	public static int n;
	public static boolean[] vis;
	public static int[] nums;
	public static void main(String[] args) throws IOException, InterruptedException {
		
		Scanner sc = new Scanner(System.in);
		PrintWriter out = new PrintWriter(System.out);
		int n = sc.nextInt();
		int d = sc.nextInt();
		int[][] a = new int[n][d];
		
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < d; j++) {
				a[i][j] = sc.nextInt(); 
			}
		}
		int ans = 0;
		for (int i = 0; i < n; i++) {
			for (int j = i+1; j < n; j++) {
				int sum= 0;
				for (int j2 = 0; j2 < d; j2++) {
					sum+= (a[j][j2]-a[i][j2])*(a[j][j2]-a[i][j2]);
				}
				if (Math.sqrt(sum) == Math.ceil(Math.sqrt(sum))) {
					ans++;
				}
			}
		}
		out.println(ans);
		out.flush();

	}


	
	

	
} Main public static int n; n public static boolean[] vis; vis public static int[] nums; nums public static void main(String[] args) throws IOException, InterruptedException {
		
		Scanner sc = new Scanner(System.in);
		PrintWriter out = new PrintWriter(System.out);
		int n = sc.nextInt();
		int d = sc.nextInt();
		int[][] a = new int[n][d];
		
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < d; j++) {
				a[i][j] = sc.nextInt(); 
			}
		}
		int ans = 0;
		for (int i = 0; i < n; i++) {
			for (int j = i+1; j < n; j++) {
				int sum= 0;
				for (int j2 = 0; j2 < d; j2++) {
					sum+= (a[j][j2]-a[i][j2])*(a[j][j2]-a[i][j2]);
				}
				if (Math.sqrt(sum) == Math.ceil(Math.sqrt(sum))) {
					ans++;
				}
			}
		}
		out.println(ans);
		out.flush();

	} main {
		
		Scanner sc = new Scanner(System.in);
		PrintWriter out = new PrintWriter(System.out);
		int n = sc.nextInt();
		int d = sc.nextInt();
		int[][] a = new int[n][d];
		
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < d; j++) {
				a[i][j] = sc.nextInt(); 
			}
		}
		int ans = 0;
		for (int i = 0; i < n; i++) {
			for (int j = i+1; j < n; j++) {
				int sum= 0;
				for (int j2 = 0; j2 < d; j2++) {
					sum+= (a[j][j2]-a[i][j2])*(a[j][j2]-a[i][j2]);
				}
				if (Math.sqrt(sum) == Math.ceil(Math.sqrt(sum))) {
					ans++;
				}
			}
		}
		out.println(ans);
		out.flush();

	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) PrintWriter out = new PrintWriter(System.out); out new PrintWriter(System.out) int n = sc.nextInt(); n sc.nextInt() sc.nextInt sc int d = sc.nextInt(); d sc.nextInt() sc.nextInt sc int[][] a = new int[n][d]; a new int[n][d] n d for (int i = 0; i < n; i++) {
			for (int j = 0; j < d; j++) {
				a[i][j] = sc.nextInt(); 
			}
		} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
			for (int j = 0; j < d; j++) {
				a[i][j] = sc.nextInt(); 
			}
		} {
			for (int j = 0; j < d; j++) {
				a[i][j] = sc.nextInt(); 
			}
		} for (int j = 0; j < d; j++) {
				a[i][j] = sc.nextInt(); 
			} int j = 0; int j = 0; j 0 j < d j d j++ j++ j {
				a[i][j] = sc.nextInt(); 
			} {
				a[i][j] = sc.nextInt(); 
			} a[i][j] = sc.nextInt() a[i][j] a[i] a i j sc.nextInt() sc.nextInt sc int ans = 0; ans 0 for (int i = 0; i < n; i++) {
			for (int j = i+1; j < n; j++) {
				int sum= 0;
				for (int j2 = 0; j2 < d; j2++) {
					sum+= (a[j][j2]-a[i][j2])*(a[j][j2]-a[i][j2]);
				}
				if (Math.sqrt(sum) == Math.ceil(Math.sqrt(sum))) {
					ans++;
				}
			}
		} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
			for (int j = i+1; j < n; j++) {
				int sum= 0;
				for (int j2 = 0; j2 < d; j2++) {
					sum+= (a[j][j2]-a[i][j2])*(a[j][j2]-a[i][j2]);
				}
				if (Math.sqrt(sum) == Math.ceil(Math.sqrt(sum))) {
					ans++;
				}
			}
		} {
			for (int j = i+1; j < n; j++) {
				int sum= 0;
				for (int j2 = 0; j2 < d; j2++) {
					sum+= (a[j][j2]-a[i][j2])*(a[j][j2]-a[i][j2]);
				}
				if (Math.sqrt(sum) == Math.ceil(Math.sqrt(sum))) {
					ans++;
				}
			}
		} for (int j = i+1; j < n; j++) {
				int sum= 0;
				for (int j2 = 0; j2 < d; j2++) {
					sum+= (a[j][j2]-a[i][j2])*(a[j][j2]-a[i][j2]);
				}
				if (Math.sqrt(sum) == Math.ceil(Math.sqrt(sum))) {
					ans++;
				}
			} int j = i+1; int j = i+1; j i+1 i 1 j < n j n j++ j++ j {
				int sum= 0;
				for (int j2 = 0; j2 < d; j2++) {
					sum+= (a[j][j2]-a[i][j2])*(a[j][j2]-a[i][j2]);
				}
				if (Math.sqrt(sum) == Math.ceil(Math.sqrt(sum))) {
					ans++;
				}
			} {
				int sum= 0;
				for (int j2 = 0; j2 < d; j2++) {
					sum+= (a[j][j2]-a[i][j2])*(a[j][j2]-a[i][j2]);
				}
				if (Math.sqrt(sum) == Math.ceil(Math.sqrt(sum))) {
					ans++;
				}
			} int sum= 0; sum 0 for (int j2 = 0; j2 < d; j2++) {
					sum+= (a[j][j2]-a[i][j2])*(a[j][j2]-a[i][j2]);
				} int j2 = 0; int j2 = 0; j2 0 j2 < d j2 d j2++ j2++ j2 {
					sum+= (a[j][j2]-a[i][j2])*(a[j][j2]-a[i][j2]);
				} {
					sum+= (a[j][j2]-a[i][j2])*(a[j][j2]-a[i][j2]);
				} sum+= (a[j][j2]-a[i][j2])*(a[j][j2]-a[i][j2]) sum (a[j][j2]-a[i][j2])*(a[j][j2]-a[i][j2]) (a[j][j2]-a[i][j2]) a[j][j2] a[j] a j j2 a[i][j2] a[i] a i j2 (a[j][j2]-a[i][j2]) a[j][j2] a[j] a j j2 a[i][j2] a[i] a i j2 if (Math.sqrt(sum) == Math.ceil(Math.sqrt(sum))) {
					ans++;
				} Math.sqrt(sum) == Math.ceil(Math.sqrt(sum)) Math.sqrt(sum) Math.sqrt Math sum Math.ceil(Math.sqrt(sum)) Math.ceil Math Math.sqrt(sum) Math.sqrt Math sum {
					ans++;
				} ans++ ans out.println(ans) out.println out ans out.flush() out.flush out String[] args args class Scanner {
	StringTokenizer st;
	BufferedReader br;

	public Scanner(InputStream system) {
		br = new BufferedReader(new InputStreamReader(system));
	}

	public String next() throws IOException {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine());
		return st.nextToken();
	}

	public String nextLine() throws IOException {
		return br.readLine();
	}

	public int nextInt() throws IOException {
		return Integer.parseInt(next());
	}

	public double nextDouble() throws IOException {
		return Double.parseDouble(next());
	}

	public char nextChar() throws IOException {
		return next().charAt(0);
	}

	public Long nextLong() throws IOException {
		return Long.parseLong(next());
	}

	public boolean ready() throws IOException {
		return br.ready();
	}

	public void waitForInput() throws InterruptedException {
		Thread.sleep(3000);
	}


} Scanner StringTokenizer st; st BufferedReader br; br public Scanner(InputStream system) {
		br = new BufferedReader(new InputStreamReader(system));
	} Scanner {
		br = new BufferedReader(new InputStreamReader(system));
	} br = new BufferedReader(new InputStreamReader(system)) br new BufferedReader(new InputStreamReader(system)) InputStream system system public String next() throws IOException {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine());
		return st.nextToken();
	} next {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine());
		return st.nextToken();
	} while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine()); st == null || !st.hasMoreTokens() st == null st null !st.hasMoreTokens() st.hasMoreTokens() st.hasMoreTokens st st = new StringTokenizer(br.readLine()) st new StringTokenizer(br.readLine()) return st.nextToken(); st.nextToken() st.nextToken st public String nextLine() throws IOException {
		return br.readLine();
	} nextLine {
		return br.readLine();
	} return br.readLine(); br.readLine() br.readLine br public int nextInt() throws IOException {
		return Integer.parseInt(next());
	} nextInt {
		return Integer.parseInt(next());
	} return Integer.parseInt(next()); Integer.parseInt(next()) Integer.parseInt Integer next() next public double nextDouble() throws IOException {
		return Double.parseDouble(next());
	} nextDouble {
		return Double.parseDouble(next());
	} return Double.parseDouble(next()); Double.parseDouble(next()) Double.parseDouble Double next() next public char nextChar() throws IOException {
		return next().charAt(0);
	} nextChar {
		return next().charAt(0);
	} return next().charAt(0); next().charAt(0) next().charAt next() next 0 public Long nextLong() throws IOException {
		return Long.parseLong(next());
	} nextLong {
		return Long.parseLong(next());
	} return Long.parseLong(next()); Long.parseLong(next()) Long.parseLong Long next() next public boolean ready() throws IOException {
		return br.ready();
	} ready {
		return br.ready();
	} return br.ready(); br.ready() br.ready br public void waitForInput() throws InterruptedException {
		Thread.sleep(3000);
	} waitForInput {
		Thread.sleep(3000);
	} Thread.sleep(3000) Thread.sleep Thread 3000 public class Main{
	public static int n;
	public static boolean[] vis;
	public static int[] nums;
	public static void main(String[] args) throws IOException, InterruptedException {
		
		Scanner sc = new Scanner(System.in);
		PrintWriter out = new PrintWriter(System.out);
		int n = sc.nextInt();
		int d = sc.nextInt();
		int[][] a = new int[n][d];
		
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < d; j++) {
				a[i][j] = sc.nextInt(); 
			}
		}
		int ans = 0;
		for (int i = 0; i < n; i++) {
			for (int j = i+1; j < n; j++) {
				int sum= 0;
				for (int j2 = 0; j2 < d; j2++) {
					sum+= (a[j][j2]-a[i][j2])*(a[j][j2]-a[i][j2]);
				}
				if (Math.sqrt(sum) == Math.ceil(Math.sqrt(sum))) {
					ans++;
				}
			}
		}
		out.println(ans);
		out.flush();

	}


	
	

	
} public class Main{
	public static int n;
	public static boolean[] vis;
	public static int[] nums;
	public static void main(String[] args) throws IOException, InterruptedException {
		
		Scanner sc = new Scanner(System.in);
		PrintWriter out = new PrintWriter(System.out);
		int n = sc.nextInt();
		int d = sc.nextInt();
		int[][] a = new int[n][d];
		
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < d; j++) {
				a[i][j] = sc.nextInt(); 
			}
		}
		int ans = 0;
		for (int i = 0; i < n; i++) {
			for (int j = i+1; j < n; j++) {
				int sum= 0;
				for (int j2 = 0; j2 < d; j2++) {
					sum+= (a[j][j2]-a[i][j2])*(a[j][j2]-a[i][j2]);
				}
				if (Math.sqrt(sum) == Math.ceil(Math.sqrt(sum))) {
					ans++;
				}
			}
		}
		out.println(ans);
		out.flush();

	}


	
	

	
} Main
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.StringTokenizer;







public class Main{
	public static int n;
	public static boolean[] vis;
	public static int[] nums;
	public static void main(String[] args) throws IOException, InterruptedException {
		
		Scanner sc = new Scanner(System.in);
		PrintWriter out = new PrintWriter(System.out);
		int n = sc.nextInt();
		int d = sc.nextInt();
		int[][] a = new int[n][d];
		
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < d; j++) {
				a[i][j] = sc.nextInt(); 
			}
		}
		int ans = 0;
		for (int i = 0; i < n; i++) {
			for (int j = i+1; j < n; j++) {
				int sum= 0;
				for (int j2 = 0; j2 < d; j2++) {
					sum+= (a[j][j2]-a[i][j2])*(a[j][j2]-a[i][j2]);
				}
				if (Math.sqrt(sum) == Math.ceil(Math.sqrt(sum))) {
					ans++;
				}
			}
		}
		out.println(ans);
		out.flush();

	}


	
	

	
}
class Scanner {
	StringTokenizer st;
	BufferedReader br;

	public Scanner(InputStream system) {
		br = new BufferedReader(new InputStreamReader(system));
	}

	public String next() throws IOException {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine());
		return st.nextToken();
	}

	public String nextLine() throws IOException {
		return br.readLine();
	}

	public int nextInt() throws IOException {
		return Integer.parseInt(next());
	}

	public double nextDouble() throws IOException {
		return Double.parseDouble(next());
	}

	public char nextChar() throws IOException {
		return next().charAt(0);
	}

	public Long nextLong() throws IOException {
		return Long.parseLong(next());
	}

	public boolean ready() throws IOException {
		return br.ready();
	}

	public void waitForInput() throws InterruptedException {
		Thread.sleep(3000);
	}


}