import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main {

	public static void main(String[] args) throws Exception {
		// TODO 自動生成されたメソッド・スタブ
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String W = in.readLine();
		String[] D = W.split(" ");

		int n = Integer.parseInt(D[0]);
		int d = Integer.parseInt(D[1]);

		ArrayList<ArrayList<Integer>> x = new ArrayList<ArrayList<Integer>>();
		for(int i=0;i<n;i++){
			W = in.readLine();
			ArrayList<Integer> tmp = new ArrayList<Integer>();
			D = W.split(" ");
			for(int k=0;k<D.length;k++){
				tmp.add(Integer.parseInt(D[k]));
			}
			x.add(tmp);
		}

		int ans =0;
		for(int i=0;i<x.size();i++){
			for(int k=i+1;k<x.size();k++){
				if(calc(x.get(i),x.get(k))){
					ans++;
				}

			}
		}

		System.out.println(ans);
	}

	public static boolean calc(ArrayList<Integer> y , ArrayList<Integer> z ){
		long ans = 0;
		for(int i=0;i<y.size();i++){
			ans += Math.pow((y.get(i)-z.get(i)), 2);
		}
		double sqrt = Math.sqrt(ans);
		long c = (long)sqrt;
		return ans == Math.pow(c,2);
	}

} import java.io.BufferedReader; BufferedReader java.io import java.io.InputStreamReader; InputStreamReader java.io import java.util.ArrayList; ArrayList java.util public class Main {

	public static void main(String[] args) throws Exception {
		// TODO 自動生成されたメソッド・スタブ
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String W = in.readLine();
		String[] D = W.split(" ");

		int n = Integer.parseInt(D[0]);
		int d = Integer.parseInt(D[1]);

		ArrayList<ArrayList<Integer>> x = new ArrayList<ArrayList<Integer>>();
		for(int i=0;i<n;i++){
			W = in.readLine();
			ArrayList<Integer> tmp = new ArrayList<Integer>();
			D = W.split(" ");
			for(int k=0;k<D.length;k++){
				tmp.add(Integer.parseInt(D[k]));
			}
			x.add(tmp);
		}

		int ans =0;
		for(int i=0;i<x.size();i++){
			for(int k=i+1;k<x.size();k++){
				if(calc(x.get(i),x.get(k))){
					ans++;
				}

			}
		}

		System.out.println(ans);
	}

	public static boolean calc(ArrayList<Integer> y , ArrayList<Integer> z ){
		long ans = 0;
		for(int i=0;i<y.size();i++){
			ans += Math.pow((y.get(i)-z.get(i)), 2);
		}
		double sqrt = Math.sqrt(ans);
		long c = (long)sqrt;
		return ans == Math.pow(c,2);
	}

} Main public static void main(String[] args) throws Exception {
		// TODO 自動生成されたメソッド・スタブ
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String W = in.readLine();
		String[] D = W.split(" ");

		int n = Integer.parseInt(D[0]);
		int d = Integer.parseInt(D[1]);

		ArrayList<ArrayList<Integer>> x = new ArrayList<ArrayList<Integer>>();
		for(int i=0;i<n;i++){
			W = in.readLine();
			ArrayList<Integer> tmp = new ArrayList<Integer>();
			D = W.split(" ");
			for(int k=0;k<D.length;k++){
				tmp.add(Integer.parseInt(D[k]));
			}
			x.add(tmp);
		}

		int ans =0;
		for(int i=0;i<x.size();i++){
			for(int k=i+1;k<x.size();k++){
				if(calc(x.get(i),x.get(k))){
					ans++;
				}

			}
		}

		System.out.println(ans);
	} main {
		// TODO 自動生成されたメソッド・スタブ
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String W = in.readLine();
		String[] D = W.split(" ");

		int n = Integer.parseInt(D[0]);
		int d = Integer.parseInt(D[1]);

		ArrayList<ArrayList<Integer>> x = new ArrayList<ArrayList<Integer>>();
		for(int i=0;i<n;i++){
			W = in.readLine();
			ArrayList<Integer> tmp = new ArrayList<Integer>();
			D = W.split(" ");
			for(int k=0;k<D.length;k++){
				tmp.add(Integer.parseInt(D[k]));
			}
			x.add(tmp);
		}

		int ans =0;
		for(int i=0;i<x.size();i++){
			for(int k=i+1;k<x.size();k++){
				if(calc(x.get(i),x.get(k))){
					ans++;
				}

			}
		}

		System.out.println(ans);
	} BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); in new BufferedReader(new InputStreamReader(System.in)) String W = in.readLine(); W in.readLine() in.readLine in String[] D = W.split(" "); D W.split(" ") W.split W " " int n = Integer.parseInt(D[0]); n Integer.parseInt(D[0]) Integer.parseInt Integer D[0] D 0 int d = Integer.parseInt(D[1]); d Integer.parseInt(D[1]) Integer.parseInt Integer D[1] D 1 ArrayList<ArrayList<Integer>> x = new ArrayList<ArrayList<Integer>>(); x new ArrayList<ArrayList<Integer>>() for(int i=0;i<n;i++){
			W = in.readLine();
			ArrayList<Integer> tmp = new ArrayList<Integer>();
			D = W.split(" ");
			for(int k=0;k<D.length;k++){
				tmp.add(Integer.parseInt(D[k]));
			}
			x.add(tmp);
		} int i=0; int i=0; i 0 i<n i n i++ i++ i {
			W = in.readLine();
			ArrayList<Integer> tmp = new ArrayList<Integer>();
			D = W.split(" ");
			for(int k=0;k<D.length;k++){
				tmp.add(Integer.parseInt(D[k]));
			}
			x.add(tmp);
		} {
			W = in.readLine();
			ArrayList<Integer> tmp = new ArrayList<Integer>();
			D = W.split(" ");
			for(int k=0;k<D.length;k++){
				tmp.add(Integer.parseInt(D[k]));
			}
			x.add(tmp);
		} W = in.readLine() W in.readLine() in.readLine in ArrayList<Integer> tmp = new ArrayList<Integer>(); tmp new ArrayList<Integer>() D = W.split(" ") D W.split(" ") W.split W " " for(int k=0;k<D.length;k++){
				tmp.add(Integer.parseInt(D[k]));
			} int k=0; int k=0; k 0 k<D.length k D.length D D.length k++ k++ k {
				tmp.add(Integer.parseInt(D[k]));
			} {
				tmp.add(Integer.parseInt(D[k]));
			} tmp.add(Integer.parseInt(D[k])) tmp.add tmp Integer.parseInt(D[k]) Integer.parseInt Integer D[k] D k x.add(tmp) x.add x tmp int ans =0; ans 0 for(int i=0;i<x.size();i++){
			for(int k=i+1;k<x.size();k++){
				if(calc(x.get(i),x.get(k))){
					ans++;
				}

			}
		} int i=0; int i=0; i 0 i<x.size() i x.size() x.size x i++ i++ i {
			for(int k=i+1;k<x.size();k++){
				if(calc(x.get(i),x.get(k))){
					ans++;
				}

			}
		} {
			for(int k=i+1;k<x.size();k++){
				if(calc(x.get(i),x.get(k))){
					ans++;
				}

			}
		} for(int k=i+1;k<x.size();k++){
				if(calc(x.get(i),x.get(k))){
					ans++;
				}

			} int k=i+1; int k=i+1; k i+1 i 1 k<x.size() k x.size() x.size x k++ k++ k {
				if(calc(x.get(i),x.get(k))){
					ans++;
				}

			} {
				if(calc(x.get(i),x.get(k))){
					ans++;
				}

			} if(calc(x.get(i),x.get(k))){
					ans++;
				} calc(x.get(i),x.get(k)) calc x.get(i) x.get x i x.get(k) x.get x k {
					ans++;
				} ans++ ans System.out.println(ans) System.out.println System.out System System.out ans String[] args args public static boolean calc(ArrayList<Integer> y , ArrayList<Integer> z ){
		long ans = 0;
		for(int i=0;i<y.size();i++){
			ans += Math.pow((y.get(i)-z.get(i)), 2);
		}
		double sqrt = Math.sqrt(ans);
		long c = (long)sqrt;
		return ans == Math.pow(c,2);
	} calc {
		long ans = 0;
		for(int i=0;i<y.size();i++){
			ans += Math.pow((y.get(i)-z.get(i)), 2);
		}
		double sqrt = Math.sqrt(ans);
		long c = (long)sqrt;
		return ans == Math.pow(c,2);
	} long ans = 0; ans 0 for(int i=0;i<y.size();i++){
			ans += Math.pow((y.get(i)-z.get(i)), 2);
		} int i=0; int i=0; i 0 i<y.size() i y.size() y.size y i++ i++ i {
			ans += Math.pow((y.get(i)-z.get(i)), 2);
		} {
			ans += Math.pow((y.get(i)-z.get(i)), 2);
		} ans += Math.pow((y.get(i)-z.get(i)), 2) ans Math.pow((y.get(i)-z.get(i)), 2) Math.pow Math (y.get(i)-z.get(i)) y.get(i) y.get y i z.get(i) z.get z i 2 double sqrt = Math.sqrt(ans); sqrt Math.sqrt(ans) Math.sqrt Math ans long c = (long)sqrt; c (long)sqrt return ans == Math.pow(c,2); ans == Math.pow(c,2) ans Math.pow(c,2) Math.pow Math c 2 ArrayList<Integer> y y ArrayList<Integer> z z public class Main {

	public static void main(String[] args) throws Exception {
		// TODO 自動生成されたメソッド・スタブ
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String W = in.readLine();
		String[] D = W.split(" ");

		int n = Integer.parseInt(D[0]);
		int d = Integer.parseInt(D[1]);

		ArrayList<ArrayList<Integer>> x = new ArrayList<ArrayList<Integer>>();
		for(int i=0;i<n;i++){
			W = in.readLine();
			ArrayList<Integer> tmp = new ArrayList<Integer>();
			D = W.split(" ");
			for(int k=0;k<D.length;k++){
				tmp.add(Integer.parseInt(D[k]));
			}
			x.add(tmp);
		}

		int ans =0;
		for(int i=0;i<x.size();i++){
			for(int k=i+1;k<x.size();k++){
				if(calc(x.get(i),x.get(k))){
					ans++;
				}

			}
		}

		System.out.println(ans);
	}

	public static boolean calc(ArrayList<Integer> y , ArrayList<Integer> z ){
		long ans = 0;
		for(int i=0;i<y.size();i++){
			ans += Math.pow((y.get(i)-z.get(i)), 2);
		}
		double sqrt = Math.sqrt(ans);
		long c = (long)sqrt;
		return ans == Math.pow(c,2);
	}

} public class Main {

	public static void main(String[] args) throws Exception {
		// TODO 自動生成されたメソッド・スタブ
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String W = in.readLine();
		String[] D = W.split(" ");

		int n = Integer.parseInt(D[0]);
		int d = Integer.parseInt(D[1]);

		ArrayList<ArrayList<Integer>> x = new ArrayList<ArrayList<Integer>>();
		for(int i=0;i<n;i++){
			W = in.readLine();
			ArrayList<Integer> tmp = new ArrayList<Integer>();
			D = W.split(" ");
			for(int k=0;k<D.length;k++){
				tmp.add(Integer.parseInt(D[k]));
			}
			x.add(tmp);
		}

		int ans =0;
		for(int i=0;i<x.size();i++){
			for(int k=i+1;k<x.size();k++){
				if(calc(x.get(i),x.get(k))){
					ans++;
				}

			}
		}

		System.out.println(ans);
	}

	public static boolean calc(ArrayList<Integer> y , ArrayList<Integer> z ){
		long ans = 0;
		for(int i=0;i<y.size();i++){
			ans += Math.pow((y.get(i)-z.get(i)), 2);
		}
		double sqrt = Math.sqrt(ans);
		long c = (long)sqrt;
		return ans == Math.pow(c,2);
	}

} Main
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main {

	public static void main(String[] args) throws Exception {
		// TODO 自動生成されたメソッド・スタブ
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String W = in.readLine();
		String[] D = W.split(" ");

		int n = Integer.parseInt(D[0]);
		int d = Integer.parseInt(D[1]);

		ArrayList<ArrayList<Integer>> x = new ArrayList<ArrayList<Integer>>();
		for(int i=0;i<n;i++){
			W = in.readLine();
			ArrayList<Integer> tmp = new ArrayList<Integer>();
			D = W.split(" ");
			for(int k=0;k<D.length;k++){
				tmp.add(Integer.parseInt(D[k]));
			}
			x.add(tmp);
		}

		int ans =0;
		for(int i=0;i<x.size();i++){
			for(int k=i+1;k<x.size();k++){
				if(calc(x.get(i),x.get(k))){
					ans++;
				}

			}
		}

		System.out.println(ans);
	}

	public static boolean calc(ArrayList<Integer> y , ArrayList<Integer> z ){
		long ans = 0;
		for(int i=0;i<y.size();i++){
			ans += Math.pow((y.get(i)-z.get(i)), 2);
		}
		double sqrt = Math.sqrt(ans);
		long c = (long)sqrt;
		return ans == Math.pow(c,2);
	}

}
