Go: package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

var scanner = bufio.NewScanner(os.Stdin)

func main() {
	for scanner.Scan() {
		n, _ := strconv.Atoi(scanner.Text())
		if n == 0 {
			break
		}

		sales := make([]int, 4000)
		members := make([]int, 0)
		memberCheck := make(map[int]bool)

		for i := 0; i < n; i++ {
			scanner.Scan()
			input := strings.Split(scanner.Text(), " ")
			e, _ := strconv.Atoi(input[0])
			p, _ := strconv.Atoi(input[1])
			q, _ := strconv.Atoi(input[2])

			if e >= 1 && e <= 4000 && memberCheck[e] == false {
				members = append(members, e)
				memberCheck[e] = true
			}
			sales[e-1] += p * q
		}

		emptyFlag := true
		for _, v := range members {
			if sales[v-1] >= 1000000 {
				fmt.Println(v)
				emptyFlag = false
			}
		}

		if emptyFlag == true {
			fmt.Println("NA")
		}
	}
}

C++: #include<iostream>
#include<string.h>
using namespace std;




int n;


void solve()
{
	bool ok=false;
	long long  total[4000];
	bool check[4000];
	memset(check,false,sizeof(check));
	memset(total,0,sizeof(total));
	for(int i=0;i<n;i++){
		int num,a,b;
		cin>>num>>a>>b;
		total[num]+=a*b;
		if(total[num]>=1000000 && !check[num]){
			cout<<num<<endl;
			check[num]=true;
			ok=true;
		}
	}
	if(!ok) cout<<"NA"<<endl;
}

int main()
{
	while(cin>>n){
		if(n==0) break;
		solve();
	}
	return 0;
}

C++: #include <iostream>

#define N 1000

using namespace std;

int main(){
	int data[N];
	int n , sum[N];
	int e[N] , p , q;

	while(1){
		int flag = 0;
		
		cin >> n;
		if(n == 0) break;
	
		for(int i = 0; i < n; i++){
			cin >> e[i] >> p >> q;
			sum[i] = p * q;
		
		}for(int i = 0; i < n; i++){
			for(int j = i + 1; j < n; j++){
				if(e[i] == e[j]){
					sum[i] += sum[j];
				}
			}
		}for(int i =  0; i < n; i++){
			if(sum[i] >= 1000000){
				flag = 1;
				cout << e[i] << endl;
			}
		}if(flag == 0){
			cout << "NA" << endl;
		}
	}
	
	return 0;
}

C++: #include<iostream>
#include<stdio.h>
#include<map>
#include<utility>
#include<queue>

using namespace std;




int main(){
	int n;
	while (cin >> n&&n != 0)
	{
		map< int, unsigned long long int> staff;
		queue< int> Queue;
		bool cnt = false;

		for (size_t i = 0; i < n; i++)
		{
			int num;
			unsigned long long b, c;
			cin >> num >> b >> c;

			staff[num] +=  (b*c);
		}
		static map< int, unsigned long long int>::iterator itr;
		for (itr = staff.begin(); itr != staff.end(); itr++){
			if (itr->second >= 1000000)
				Queue.push(itr->first);

		}
		if (Queue.size() == 0){
			cout << "NA" << endl;
		}
		else
		{
			while (Queue.size() > 0){

				cout << Queue.front() << endl;
				Queue.pop();

			}

		}

	}

	return 0;
}

C++: 

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <vector>
#include <string>
#include <queue>
#include <algorithm>
#include <math.h>
#include <utility>
#include <set>
#include <map>
#define INF 100000
#define rep(i,n) for(int i =0;i<n;i++)
using namespace std;
typedef long long int ll;

#define MAX 5000

/*
int main(){
    int n = 100;
    for (int i=0; i<n; i++) {
        cout << 2000+i<<" "<< 123213242%(100000+i*100) +1421%(10+i)*100<<" "<<1421%(100+i)*100<<endl;
    }
}*/


int main(){
    for (;;) {
        ll n;
        cin >> n;
        if(n==0) break;
        vector<ll> num(4001,0),pre(n,0),data(4001,0);
        for (int i=0; i<n; i++) {
            ll a,b,c;
            cin >>a >>b >>c;
            ll inp;
            if(b*c>=1000000){
                inp=1000000;
            }else{
                inp = b*c;
            }
            if(data[a]<1000000) data[a]+=inp;
            if(num[a]==0) num[a]=i+1;
        }
        for (int k=0; k< 4001; k++) {
            if(num[k]!=0) pre[num[k]]=k;
        }
        ll ch=0;
        for (int j=0; j<n; j++) {
            if (data[pre[j]]>=1000000) {
                cout <<pre[j]<<endl;
                ch++;
            }
        }
        if(ch==0) cout << "NA"<<endl;
    }
}

C++: #include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
#include <string>
#include <map>
#include <functional>
#include <cmath>
#include <cstdio>
using namespace std;

#define PI 4*atan(1)

int main(){
  int n;
  while(cin >> n, n){
    map<int,int> e;
    for(int i = 1; i <= 4000; i++){
      e[i] = 0;
    }
    for(int i = 0; i < n; i++){
      int tmp[3];
      cin >> tmp[0] >> tmp[1] >> tmp[2];
      e[tmp[0]] += tmp[1] * tmp[2];
    }
    int cnt = 0;
    for(int i = 1; i <= 4000; i++){
      if(e[i] >= 1000000){
        cout << i << endl;
        cnt++;
      }
    }
    if(cnt == 0){
      cout << "NA" << endl;
    }
  }
}

C++: #include <bits/stdc++.h>

using namespace std;

typedef long long int ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

const int INF = 1000000000;
const ll LINF = (ll) 4000000000000000000;
const ll MOD = (ll) 1000000007;
const double PI = acos(1.0);
const int limit = 100010;

#define REP(i,m,n) for(ll i = m; i < (ll)(n); i++)
#define rep(i,n) REP(i, 0, n)
#define MP make_pair
#define YES(n) cout << ((n) ? "YES" : "NO") << endl
#define Yes(n) cout << ((n) ? "Yes" : "No") << endl
#define Possible(n) cout << ((n) ? "Possible" : "Impossible") << endl
#define NP(v) next_permutation(v.begin(),v.end())
#define smaller_queue  priority_queue <ll, vector<ll>, greater<ll> >
//------------------------------------------------------

int main() {

    while (1) {
        int n;
        cin >> n;
        if (n == 0) break;

        bool na = true;
        set<ll> st;
        map<ll, ll> mp;

        rep(k, n) {
            ll i, p, q;
            cin >> i >> p >> q;
            st.insert(i);
            mp[i] += p*q;
        }

        auto itr = st.begin();
        while (itr != st.end()) {
            if (mp[*itr] >= 1000000) {
                cout << *itr << endl;
                na = false;
            }
            itr++;
        }

        if (na) cout << "NA" << endl;
    }

    return 0;
}

C++: #include<iostream>
#include<vector>
int main(){
	int n;
	while(1){
		std::cin>>n;
		if(n==0)break;
		bool f=false;
		std::vector<int> vec;
		for(int i=0;i<n;i++){
			int a,b,c;
			std::cin>>a>>b>>c;
			if(b*c>=1000000)vec.push_back(a);
		}
		if(vec.empty())std::cout<<"NA"<<std::endl;
		else{
			for(int i=0;i<vec.size();i++){
				std::cout<<vec[i]<<std::endl;
			}
		}
	}
	return 0;
}

C++: #include<iostream>
#include<vector>
using namespace std;

int main(){

  int num, v, n, m, len, cnt;
  vector<long long> vc[2];

  while(cin >> n){
    if(n == 0) break;
    vc[0].clear();
    vc[1].clear();
    len = 0;

    for(int i=0; i<n; i++){
      cin >> num >> v >> m;
      for(int j=0; j<=len; j++){
        if(j == len){
          vc[0].push_back(num);
          vc[1].push_back(v * m);
          len++;
          break;
        }
        if(vc[0][j] == num){
          if(vc[1][j] < 1000000){
            vc[1][j] += v * m;
          }
          break;
        }
      }
    }
    
    cnt = 0;
    for(int i=0; i<len; i++){
      if(vc[1][i] >= 1000000){
        cout << vc[0][i] << endl;
        cnt++;
      }
    }
    if(cnt == 0) cout << "NA" << endl;

  }

  return 0;

}

C++: #include <iostream>
#include <map>
using namespace std;
int main (int argc, char const* argv[]) {
  int saler_number;
  while (true) {
    cin >> saler_number;
    if (saler_number == 0) break;
    map<int,long long> result;
    int id, price, num;
    for (int i = 0; i < saler_number; i += 1) {
      cin >> id >> price >> num;
      if (result.count(id) == 0) {
        result.insert(make_pair(id,price * num));
      } else {
        result[id] += price * num;
      }
    }
    //
    bool valid_NA = true;
    map<int,long long>::iterator it = result.begin();
    while (it != result.end()) {
      if (it->second >= 1000000) {
        cout << it->first << endl;
        valid_NA = false;
      }
      //cout << it->first << ":" << it->second << endl;
      it++;
    }
    if (valid_NA) cout << "NA" << endl;
  }
  return 0;
}