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++: /* {{{ Shinobu kawaii */
/*
  ______   __        _                  __                 
.' ____ \ [  |      (_)                [  |                
| (___ \_| | |--.   __   _ .--.   .--.  | |.--.   __   _   
 _.____`.  | .-. | [  | [ `.-. |/ .'`\ \| '/'`\ \[  | | |  
| \____) | | | | |  | |  | | | || \__. ||  \__/ | | \_/ |, 
 \______.'[___]|__][___][___||__]'.__.'[__;.__.'  '.__.'_/ 
                                                           
*/
/* }}} */
/* include {{{ */
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <climits>
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
#include <utility>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <deque>
#include <functional>
using namespace std;
/* }}} */

// #define int long long

/* cpp template {{{ */
/* short */
#define pb push_back
#define mp make_pair
#define print(x) cout << x << '\n'
#define Fi first
#define Se second

/* REPmacro */
#define REPS(i, a, n) for (int i = (a); i < (n); i++)
#define REP(i, n) for (int i = 0; i < (n); i++)
#define RREP(i, n) for (int i = 1; i <= (n); i++)
#define DEPS(i, a, n) for (int i = (a); i >= n; i--)
#define DEP(i, n) for (int i = (n); i >= 0; i--)

/* typedef */
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef vector<vector<int> > vii;
typedef pair<int, int> pii;

/* const */
const int INF = 999999999;
const int dx[] = {0, 1, 0, -1, 1, -1, 1, -1}, dy[] = {1, 0, -1, 0, 1, -1, -1, 1};

/* func */
inline bool is_uruu(int y) {return (y % 4 == 0 && (y % 100 != 0 || y % 400 == 0));}
inline bool inside(int y, int x, int H, int W) {return (y >= 0 && x >= 0 && y < H && x < W);}

/* }}} */

bool same(vector<pair<int, ll> >& t, int num, ll p)
{
  bool ok = true;
  REP(i, t.size()){
    if (num == t[i].Fi){
      ok = false;
      t[i].Se += p;
      break;
    }
  }

  return ok;
}

signed main()
{
  cin.tie(0);
  ios::sync_with_stdio(false);

  int n;
  while (cin >> n, n){
    vector<pair<int, ll> > table;
    REP(i, n){
      int num; ll price, cnt;
      cin >> num >> price >> cnt;
      if (same(table, num, price * cnt)){
        table.pb(mp(num, price * cnt));
      }
    }
    bool only = true;
    REP(i, table.size()){
      if (table[i].Se >= 1e6){
        print(table[i].Fi);
        only = false;
      }
      //cout << table[i].Fi << " " << table[i].Se << endl;
    }
    if (only) print("NA");
  }

  return (0);
}

C++: #include <iostream>
#include <map>
#include <list>
#include <cmath>
using namespace std;

struct staff {
	unsigned long long int num;
	unsigned long long int price;
	unsigned long long int quan;
	unsigned long long int total;
};

int main()
{
	int num, i, k, j, datas;
	unsigned long long int sn, sp, sq;
	map<int, staff> staffs[4000];
	map<int, staff>::iterator staffs_it;

	datas = 0;
	while(1)
	{
		cin >> num; if(num == 0) break;

		for(i = 0; i < num; i++)
		{
			cin >> sn >> sp >> sq;
			staffs[datas][sn].num = sn;
			staffs[datas][sn].price = sp;
			staffs[datas][sn].quan = sq;
			staffs[datas][sn].total += staffs[datas][sn].price * staffs[datas][sn].quan;
		}
		datas++;
	}

	for(i = 0; i < datas; i++)
	{
		staffs_it = staffs[i].begin();
		int over = 0;

		while(staffs_it != staffs[i].end())
		{
			if(staffs[i][(*staffs_it).first].total >= 1000000)
			{
				cout << staffs[i][(*staffs_it).first].num << endl;
				over++;
			}
			staffs_it++;
		}
		if(over == 0) cout << "NA" << endl;
	}
}

C++: #include <iostream>
#include <vector>
#include <utility>
#include <algorithm>

using namespace std;

int main(){
    vector<pair<int, long long> > data;

    int n;
    while(cin >> n, n){
        for(int i=0; i < n; i++){
            int num, cost, goodsNum;
            cin >> num >> cost >> goodsNum;

            bool exist = false;
            for(int j=0; j < data.size(); j++){
                if(data[j].first == num){
                    data[j].second += cost * goodsNum;
                    exist = true;
                    break;
                }
            }
            if(!exist){
                data.push_back(pair<int, long long int>(num, cost*goodsNum));
            }
        }
        bool exist = false;
        for(int i=0; i < data.size(); i++){
            if(1000000 <= data[i].second){
                cout << data[i].first << endl;
                exist = true;
            }
        }
        if(!exist)cout << "NA" << endl;
        data.clear();
    }
}

C++: #include <bits/stdc++.h>
using namespace std;
#define GOOD 1000000

long total[4005];

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(0);

	int n, id, p, q, cnt;
	cin >> n;
	while (n != 0) {
		for (int i = 0; i < 4005; i++) {
			total[i] = 0;
		}
		cnt = 1;
		for (int i = 0; i < n; i++) {
			cin >> id >> p >> q;
			long before = total[id];
			total[id] += p * q;
			if (before < GOOD && total[id] >= GOOD) {
				cout << id << endl;
				cnt = 0;
			}
		}
		if  (cnt) {
			cout << "NA" << endl;
		}
		cin >> n;
	}
}

C++: main()
{
  int kaisuu[100],syain[4000],n=1,tanka[4000],suuryou[4000];
  int i=0,j,flag=0,a=0;
  scanf("%d",&n);
  while(n!=0){
    
    
    for(i=0;i<n;i++){
      scanf("%d %d %d",&syain[i],&tanka[i],&suuryou[i]);
    }

    for(i=0;i<n;i++){
      if(1000000<=tanka[i] * suuryou[i]){
	printf("%d\n",syain[i]);
	flag=1;
      }
    }
    if(flag==0){
      printf("NA\n");
    }
    scanf("%d",&n);
  }
  return 0;
}

C++: 
#include <iostream>
#include <vector>
#include <string>
#include <stdlib.h>
#include <stdio.h>
#include <sstream>
using namespace std;
#define p 1000000 

int main(void){
//	FILE* fp_in = freopen("data.txt", "r", stdin);


	while(1){
		long long int n,tmp[3],cnt = 0, flg = 0;
		vector<long long int> number;
		vector<long long int> sales;
		cin >> n;
		if(n == 0) break;
		for(int i=0; i<n; i++) {
			flg = 0;
			cin >> tmp[0] >> tmp[1] >> tmp[2];
			for(int j=0; j<number.size(); j++){
				if(number.at(j) == tmp[0]) {
					sales.at(j) += tmp[1]*tmp[2];
					flg = 1;
					break;
				}
			}
			if(flg == 1) break;
			number.push_back(tmp[0]);
			sales.push_back(tmp[1]*tmp[2]);
		}
		for(int i=0; i<number.size(); i++) {
			if(sales.at(i) >= p) {
				cout << number.at(i) << endl;
				cnt++;
			}
		}
		if(cnt == 0) {
			cout << "NA" << endl;
		} 
	}


	return 0;
}

C++: #include <stdio.h>
 
 

 
int main(void){
	int i,j,k;
	int n,num[4000];
	long long int tanka[4000],sale_num[4000],sale_all[4001];
	bool judge[4001];
	
	while(scanf("%d",&n),n){
		
		//初期化

		k=0;
		for(j=0;j<=4001;j++){
			judge[j]=0;
			sale_all[j]=0;
		}
		
		for(i=0;i<n;i++){
			scanf("%d%lld%lld",&num[i],&tanka[i],&sale_num[i]);
		}
		
		
		//idに対応したsaleに+
		for(i=0;i<n;i++){
			sale_all[num[i]] = sale_all[num[i]] + tanka[i]*sale_num[i];
		}
		
		for(i=0;i<n;i++){
			if((sale_all[num[i]] >= 1000000)&&(judge[num[i]]==0)){
				printf("%d\n",num[i]);
				judge[num[i]]=1;
				k=1;
			}
		}
		
		if(k!=1)printf("NA\n");
	}
	
	return 0;
}